Maison  >  Questions et réponses  >  le corps du texte

Comment analyser et traiter HTML/XML en utilisant PHP ?

Comment analyser HTML/XML et en extraire des informations ?

P粉154228483P粉154228483394 Il y a quelques jours628

répondre à tous(2)je répondrai

  • P粉520545753

    P粉5205457532023-10-13 00:52:20

    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 . '
    '; // Find all links foreach($html->find('a') as $element) echo $element->href . '
    ';

    Comment modifier des éléments HTML :

    // Create DOM from string
    $html = str_get_html('
    Hello
    World
    '); $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);

    répondre
    0
  • P粉619896145

    P粉6198961452023-10-13 00:47:49

    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< /a> 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 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< /a>


    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.

    répondre
    0
  • Annulerrépondre