Remarque : comme son nom l'indique, il est utile pour les tâches simples. Il utilise des expressions régulières au lieu d'un analyseur HTML, il sera donc beaucoup plus lent pour les tâches plus complexes. La majeure partie de sa base de code a été écrite en 2008, avec seulement des améliorations mineures apportées depuis. Il ne suit pas les normes de codage PHP modernes et est difficile à intégrer dans des projets modernes conformes au PSR.
// Create DOM from URL or file
$html = file_get_html('http://www.example.com/');
// Find all images
foreach($html->find('img') as $element)
echo $element->src . '<br>';
// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';
Comment modifier des éléments HTML :
// Create DOM from string
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');
$html->find('div', 1)->class = 'bar';
$html->find('div[id=hello]', 0)->innertext = 'foo';
echo $html;
Extraire du contenu depuis HTML :
// Dump contents (without tags) from HTML
echo file_get_html('http://www.google.com/')->plaintext;
Saisissez Slashdot :
// Create DOM from URL
$html = file_get_html('http://slashdot.org/');
// Find all article blocks
foreach($html->find('div.article') as $article) {
$item['title'] = $article->find('div.title', 0)->plaintext;
$item['intro'] = $article->find('div.intro', 0)->plaintext;
$item['details'] = $article->find('div.details', 0)->plaintext;
$articles[] = $item;
}
print_r($articles);
Je préfère utiliser l'une des extensions XML natives car elles fonctionnent avec PHP généralement plus rapidement que toutes les bibliothèques tierces et me donnent tout le contrôle dont j'ai besoin sur le balisage.
Travailler avec DOM prend un certain temps pour devenir productif, mais à mon avis, cela en vaut la peine. Étant donné que DOM est une interface neutre en termes de langage, vous trouverez des implémentations dans plusieurs langages. Par conséquent, si vous devez changer de langage de programmation, vous savez probablement déjà comment utiliser l'API DOM de ce langage.
Comment utiliser les extensions DOM a été largement couvert sur StackOverflow, donc si et quand vous choisissez de l'utiliser, vous pouvez être sûr que la plupart des problèmes que vous rencontrez peuvent être résolus en recherchant/parcourant Stack Overflow.
XMLReader, comme DOM, est basé sur libxml. Je ne sais pas comment déclencher le module d'analyseur HTML, donc utiliser XMLReader pour analyser du HTML corrompu n'est peut-être pas aussi puissant que d'utiliser le DOM, où vous pouvez lui dire explicitement d'utiliser le module d'analyseur HTML de libxml.
SimpleXML est une option lorsque vous savez que HTML est un XHTML valide. Si vous avez besoin d'analyser du HTML cassé, ne considérez même pas SimpleXml car cela bloquerait.
Des exemples d'utilisation de base
sont fournis, et il y en a bien d'autres dans le Manuel PHP.
L'avantage de construire sur DOM/libxml est que vous obtenez de bonnes performances dès le départ car vous construisez sur des extensions natives. Cependant, toutes les bibliothèques tierces ne suivent pas cette voie. Certains d'entre eux sont répertoriés ci-dessous
Je ne recommande généralement pas cet analyseur. La base de code est épouvantable et l'analyseur lui-même est assez lent et gourmand en mémoire. Tous les sélecteurs jQuery (tels que sous-sélecteurs) ne sont pas possibles. Toute bibliothèque basée sur libxml devrait facilement surpasser cela.
Encore une fois, je ne recommanderais pas cet analyseur. Assez lent lorsque l'utilisation du processeur est élevée. Il n'y a pas non plus de fonction pour effacer la mémoire des objets DOM créés. Ces problèmes sont particulièrement graves dans les boucles imbriquées. Le document lui-même est inexact et contient des fautes d’orthographe, et aucune réponse corrective n’a été reçue depuis le 14 avril 2016.
HTML5
Vous pouvez utiliser ce qui précède pour analyser HTML5, mais des choses étranges peuvent se produire en raison du balisage autorisé par HTML5. Par conséquent, pour HTML5, vous souhaiterez peut-être envisager d’utiliser un analyseur dédié. Notez que ceux-ci sont écrits en PHP, donc les performances seront plus lentes et l'utilisation de la mémoire augmentée par rapport aux extensions compilées avec des langages de niveau inférieur.
La plupart des extraits de code que vous trouvez sur le Web pour les balises correspondantes sont fragiles. Dans la plupart des cas, ils ne fonctionnent qu’avec des extraits HTML très spécifiques. De petites modifications de balisage (telles que l'ajout d'un espace quelque part, ou l'ajout ou la modification d'un attribut dans le balisage) peuvent entraîner l'échec d'une expression régulière lorsqu'elle est mal écrite. Avant d'utiliser RegEx sur HTML, vous devez savoir ce que vous faites.
L'analyseur HTML connaît déjà les règles de syntaxe du HTML. Les expressions régulières doivent être enseignées pour chaque nouvelle expression régulière que vous écrivez. Les expressions régulières sont utiles dans certains cas, mais cela dépend vraiment de votre cas d'utilisation.
Vous pourriez écrire un analyseur plus fiable , mais écrire un analyseur personnalisé complet et fiable utilisant des expressions régulières est une perte de temps lorsque les bibliothèques ci-dessus existent déjà et font un bien meilleur travail dans ce domaine.
Essayez Simple HTML DOM Parser.
Remarque : comme son nom l'indique, il est utile pour les tâches simples. Il utilise des expressions régulières au lieu d'un analyseur HTML, il sera donc beaucoup plus lent pour les tâches plus complexes. La majeure partie de sa base de code a été écrite en 2008, avec seulement des améliorations mineures apportées depuis. Il ne suit pas les normes de codage PHP modernes et est difficile à intégrer dans des projets modernes conformes au PSR.
Exemple :
Comment obtenir des éléments HTML :
Comment modifier des éléments HTML :
Extraire du contenu depuis HTML :
Saisissez Slashdot :
Extension XML native
Je préfère utiliser l'une des extensions XML natives car elles fonctionnent avec PHP généralement plus rapidement que toutes les bibliothèques tierces et me donnent tout le contrôle dont j'ai besoin sur le balisage.
DOM
DOM est capable d'analyser et de modifier le HTML (cassé) du monde réel, il peut effectuer des requêtes XPath Il est basé sur libxml.
Travailler avec DOM prend un certain temps pour devenir productif, mais à mon avis, cela en vaut la peine. Étant donné que DOM est une interface neutre en termes de langage, vous trouverez des implémentations dans plusieurs langages. Par conséquent, si vous devez changer de langage de programmation, vous savez probablement déjà comment utiliser l'API DOM de ce langage.
Comment utiliser les extensions DOM a été largement couvert sur StackOverflow, donc si et quand vous choisissez de l'utiliser, vous pouvez être sûr que la plupart des problèmes que vous rencontrez peuvent être résolus en recherchant/parcourant Stack Overflow.
Des exemples d'utilisation de baseet Aperçu général du conceptpeuvent être trouvés dans d'autres réponses.
Lecteur XML
XMLReader, comme DOM, est basé sur libxml. Je ne sais pas comment déclencher le module d'analyseur HTML, donc utiliser XMLReader pour analyser du HTML corrompu n'est peut-être pas aussi puissant que d'utiliser le DOM, où vous pouvez lui dire explicitement d'utiliser le module d'analyseur HTML de libxml.
Un exemple d'utilisation de base est fourni dans une autre réponse.
analyseur XML La bibliothèque d'analyseurs
XML est également basée sur libxml et implémente un analyseur push XML de styleSAX. C'est probablement un meilleur choix que DOM ou SimpleXML pour la gestion de la mémoire, mais plus difficile à utiliser que l'analyseur pull implémenté par XMLReader.
SimpleXml
SimpleXML est une option lorsque vous savez que HTML est un XHTML valide. Si vous avez besoin d'analyser du HTML cassé, ne considérez même pas SimpleXml car cela bloquerait.sont fournis, et il y en a bien d'autres dans le Manuel PHP.
- Guide de l'architecte PHP sur le Web Scraping avec PHP
Bibliothèque tierce (basée sur libxml)
Si vous préférez utiliser une bibliothèque tierce, je vous recommande d'utiliser DOM/libxml ci-dessous au lieu de l'analyse de chaînes.
FluentDom
HtmlPageDom
phpQuery
Ceci est décrit comme « Logiciels abandonnés et bugs : utilisez à vos propres risques » mais semble être peu entretenu.
laminas-dom
fDOMDocument
sabre/xml
FluidXML
Tiers (non basé sur libxml)
L'avantage de construire sur DOM/libxml est que vous obtenez de bonnes performances dès le départ car vous construisez sur des extensions natives. Cependant, toutes les bibliothèques tierces ne suivent pas cette voie. Certains d'entre eux sont répertoriés ci-dessous
Parseur DOM HTML simple PHP
Je ne recommande généralement pas cet analyseur. La base de code est épouvantable et l'analyseur lui-même est assez lent et gourmand en mémoire. Tous les sélecteurs jQuery (tels que sous-sélecteurs) ne sont pas possibles. Toute bibliothèque basée sur libxml devrait facilement surpasser cela.
Parseur HTML PHP
Encore une fois, je ne recommanderais pas cet analyseur. Assez lent lorsque l'utilisation du processeur est élevée. Il n'y a pas non plus de fonction pour effacer la mémoire des objets DOM créés. Ces problèmes sont particulièrement graves dans les boucles imbriquées. Le document lui-même est inexact et contient des fautes d’orthographe, et aucune réponse corrective n’a été reçue depuis le 14 avril 2016.
HTML5
Vous pouvez utiliser ce qui précède pour analyser HTML5, mais des choses étranges peuvent se produire en raison du balisage autorisé par HTML5. Par conséquent, pour HTML5, vous souhaiterez peut-être envisager d’utiliser un analyseur dédié. Notez que ceux-ci sont écrits en PHP, donc les performances seront plus lentes et l'utilisation de la mémoire augmentée par rapport aux extensions compilées avec des langages de niveau inférieur.
Document HTML5Dom
HTML5
Expressions régulières
Dernier et le moins recommandé, vous pouvez utiliser des expressions régulièrespour extraire des données du HTML a >. En général, l'utilisation d'expressions régulières sur HTML est déconseillée.
La plupart des extraits de code que vous trouvez sur le Web pour les balises correspondantes sont fragiles. Dans la plupart des cas, ils ne fonctionnent qu’avec des extraits HTML très spécifiques. De petites modifications de balisage (telles que l'ajout d'un espace quelque part, ou l'ajout ou la modification d'un attribut dans le balisage) peuvent entraîner l'échec d'une expression régulière lorsqu'elle est mal écrite. Avant d'utiliser RegEx sur HTML, vous devez savoir ce que vous faites.
L'analyseur HTML connaît déjà les règles de syntaxe du HTML. Les expressions régulières doivent être enseignées pour chaque nouvelle expression régulière que vous écrivez. Les expressions régulières sont utiles dans certains cas, mais cela dépend vraiment de votre cas d'utilisation.
Vous pourriez écrire un analyseur plus fiable , mais écrire un analyseur personnalisé complet et fiable utilisant des expressions régulières est une perte de temps lorsque les bibliothèques ci-dessus existent déjà et font un bien meilleur travail dans ce domaine.
Voir aussiAnalyse de la voie Cthulhu Html
Livres
Si vous voulez dépenser de l'argent, vous pouvez le vérifier
Je ne suis pas affilié à des architectes ou à des auteurs PHP.