Comment parser du HTML ou XML en PHP ?

Réponses rédigées par Antoine
Dernière mise à jour : 2018-11-22 22:42:22
Thèmes : php - html - xml
Question

Quelles sont les bonnes méthodes pour analyser et parser du HTML ou XML, et en extraire des informations, avec PHP ?

Réponse

Pour parser (analyser) du code HTML ou XML, Il est préférable d'utiliser l’une des extensions XML natives, car elles sont fournies avec PHP, et elles sont généralement plus rapides que toutes les bibliothèques tierces.

Extensions XML natives

DOM est capable d’analyser et de modifier du code HTML, correct ou contenant des erreurs, et d’effectuer des requêtes XPath. Il est basé sur libxml, et c'est surement la meilleure solution pour parser de l'HTML ou du XML avec PHP.

Exemple : Extraire la valeur HREF d'une balise A contenu dans une variable PHP $web :

$dom = new DOMDocument;
$dom->loadHTML($web);
foreach ($dom->getElementsByTagName('a') as $node) {
    echo $dom->saveHtml($node), PHP_EOL;
}

XMLReader, comme DOM, est basé sur libxml. Parser avec XMLReader permet une bonne analyse du code HTML, mais XMLReader s'avère moins robuste que DOM lorsqu'il doit faire face à du code contenant des erreurs.

La bibliothèque XML Parser est également basée sur libxml et implémente un analyseur XML de type SAX. C'est un bon choix si vous devez faire face à des problématiques de ressource mémoire.

SimpleXML, à utiliser lorsque vous savez que le code HTML est valide XHTML. Face à du HTML contenant des erreurs SimpleXML aura tendance à mal réagir.

Si vous préférez utiliser une bibliothèque tierce, vous avez l’embarras du choix. L’utilisation de DOM / libxml présente l’avantage d’obtenir de bonnes performances, car vous êtes basé sur une extension native. Cependant, certaines bibliothèques tierces ne suivent pas cette voie.

Bibliothèques tierces pour parser et analyser avec PHP

HtmlPageDom QueryPath FluentDOM Zend-Dom fDomDocument SabreXml Ganon SimpleHtmlDom Html5lib

Remarque : Vous pourriez aussi extraire des données HTML, en PHP, avec des expressions régulières, mais il est déconseillé de les utiliser à moins que les informations à traiter et parser soient sécurisées et minimales.