Comment analyser et traiter HTML/XML en PHP ?
P粉466643318
P粉466643318 2023-10-11 23:59:23
0
2
769

Comment analyser HTML/XML et en extraire des informations ?

P粉466643318
P粉466643318

répondre à tous(2)
P粉555696738

Essayez Simple HTML DOM Parser.

  • Analyseur HTML DOM écrit en PHP 5+ qui vous permet de manipuler du HTML de manière très simple !
  • Nécessite PHP 5+.
  • Prend en charge le HTML invalide.
  • Utilisez des sélecteurs pour rechercher des balises sur les pages HTML, tout comme jQuery.
  • Extrayez le contenu du HTML en une seule ligne.
  • Télécharger

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 :

// 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 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);
P粉115840076

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 l'utilisation d'un 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 style

SAX. 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.

Des exemples d'utilisation de base

sont fournis, et il y en a bien d'autres dans le manuel 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-les à 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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal