Parsing HTML en PHP : Guide complet pour l'extraction de données depuis des pages web
Le parsing HTML est l'une des tâches clés du développement web, permettant d'extraire automatiquement des données structurées depuis des pages web. PHP propose des outils intégrés puissants à cet effet, notamment les extensions DOMDocument et SimpleXML, ainsi que la bibliothèque cURL pour gérer les requêtes HTTP. Dans cet article, nous allons détailler comment parser du HTML en PHP, examiner les meilleures pratiques, la gestion des erreurs et des exemples de code.
Outils principaux pour le parsing HTML en PHP
Pour le parsing HTML en PHP, les composants principaux suivants sont utilisés :
- DOMDocument — classe intégrée pour travailler avec l'arbre DOM HTML/XML. Permet de charger, modifier et extraire des éléments.
- DOMXPath — extension pour DOMDocument, permettant d'exécuter des requêtes XPath pour une recherche précise de nœuds.
- SimpleXML — extension simplifiée pour travailler avec XML, mais peut également être utilisée pour HTML à condition que la structure soit correcte.
- cURL — bibliothèque pour effectuer des requêtes HTTP, nécessaire pour obtenir le code HTML de pages distantes.
Exemple pas à pas de parsing HTML avec DOMDocument
Examinons un exemple complet de parsing d'une page HTML. Supposons que nous devions extraire les titres d'articles (balises <h2>) et les liens (<a>) d'un site.
<?php// 1. On obtient le code HTML de la page avec cURL$url = 'https://example.com/articles';$ch = curl_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');$html = curl_exec($ch);if (curl_errno($ch)) { die('Erreur cURL : ' . curl_error($ch));}curl_close($ch);
// 2. On crée un objet DOMDocument et on charge le HTML$dom = new DOMDocument();libxml_use_internal_errors(true); // On supprime les erreurs de parsing du HTML invalide$dom->loadHTML($html);libxml_clear_errors();
// 3. On crée un objet DOMXPath pour une recherche pratique$xpath = new DOMXPath($dom);
// 4. On extrait tous les titres h2$headings = $xpath->query('//h2');echo "<h3>Titres des articles :</h3>";foreach ($headings as $heading) { echo "<p>" . htmlspecialchars($heading->nodeValue) . "</p>";}
// 5. On extrait tous les liens avec la classe 'article-link'$links = $xpath->query('//a[@class="article-link"]');echo "<h3>Liens vers les articles :</h3>";foreach ($links as $link) { $href = $link->getAttribute('href'); $text = $link->nodeValue; echo "<p><a href='" . htmlspecialchars($href) . "'>" . htmlspecialchars($text) . "</a></p>";}?>Utilisation de SimpleXML pour les cas simples
SimpleXML est pratique pour parser des documents HTML bien structurés, mais ne gère pas le HTML invalide. Exemple d'extraction de données depuis un tableau :
<?php$html = '<table><tr><td>Cellule 1</td><td>Cellule 2</td></tr></table>';$xml = simplexml_load_string($html);if ($xml === false) { echo "Erreur de chargement du HTML";} else { foreach ($xml->tr->td as $cell) { echo "Données : " . htmlspecialchars($cell) . "<br>"; }}?>Gestion des erreurs et meilleures pratiques
Lors du parsing HTML en PHP, il est important de prendre en compte les points suivants :
- Suppression des erreurs : Utilisez
libxml_use_internal_errors(true)avant de charger le HTML pour éviter l'affichage d'avertissements concernant un balisage invalide. - Encodage : Assurez-vous que le HTML est chargé dans le bon encodage (UTF-8). Si nécessaire, utilisez
mb_convert_encoding(). - User-Agent : Toujours
Aussi dans la bibliothèque
Tests en JavaScript (Node.js) : frameworks et outils
Envoi de SMS en C++ : API bibliothèque LibCurl et requêtes REST
Travailler avec CSV en Swift (iOS/macOS) — bibliothèques et exemples de code