Parsing HTML en PHP : DOMDocument, SimpleXML et cURL pour le web scraping

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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

Recommendations