simplexmlelement Comment analyser et traiter HTML/XML en PHP?




simplexmlelement php (19)

Extensions XML natives

Je préfère utiliser l'une des extensions XML natives car elles sont livrées avec PHP, sont généralement plus rapides que toutes les librairies tierces et me donnent tout le contrôle dont j'ai besoin sur le balisage.

DOM

L'extension DOM vous permet de travailler sur des documents XML via l'API DOM avec PHP 5. Il s'agit d'une implémentation du Core Object Level 3 du modèle d'objet document du W3C, une interface plate-forme et langage qui permet aux programmes et scripts d'accéder dynamiquement le contenu, la structure et le style des documents.

DOM est capable d'analyser et de modifier le HTML réel (cassé) et il peut faire des requêtes XPath . Il est basé sur libxml .

Il faut du temps pour être productif avec DOM, mais ce temps en vaut la peine. Puisque DOM est une interface indépendante du langage, vous trouverez des implémentations dans de nombreuses langues, donc si vous avez besoin de changer votre langage de programmation, il y a de fortes chances que vous sachiez déjà comment utiliser l'API DOM de cette langue.

Un exemple d'utilisation basique peut être trouvé dans Saisir l'attribut href d'un élément A et un aperçu conceptuel général peut être trouvé sur DOMDocument en php

Comment utiliser l'extension DOM a été largement couvert sur StackOverflow , donc si 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

L'extension XMLReader est un analyseur d'extraction XML. Le lecteur agit comme un curseur vers l'avant sur le flux de documents et s'arrête sur chaque nœud en cours de route.

XMLReader, comme DOM, est basé sur libxml. Je ne suis pas conscient de la façon de déclencher le module HTML Parser. Il est donc probable que l'utilisation de XMLReader pour analyser du code HTML rompu soit moins robuste que l'utilisation de DOM où vous pouvez lui indiquer explicitement d'utiliser le module HTML Parser.

Un exemple d'utilisation de base peut être trouvé à obtenir toutes les valeurs de balises h1 en utilisant php

XML Parser

Cette extension vous permet de créer des analyseurs XML, puis de définir des gestionnaires pour différents événements XML. Chaque analyseur XML possède également quelques paramètres que vous pouvez ajuster.

La bibliothèque XML Parser est également basée sur libxml et implémente un analyseur syntaxique XML de style SAX . Il peut être un meilleur choix pour la gestion de la mémoire que DOM ou SimpleXML, mais sera plus difficile à utiliser que l'analyseur de pull implémenté par XMLReader.

SimpleXml

L'extension SimpleXML fournit un jeu d'outils très simple et facilement utilisable pour convertir du XML en un objet qui peut être traité avec des sélecteurs de propriétés normales et des itérateurs de tableaux.

SimpleXML est une option lorsque vous savez que le code HTML est XHTML valide. Si vous avez besoin d'analyser le HTML cassé, ne prenez même pas en compte SimpleXml, car il va s'étouffer.

Un exemple d'utilisation basique peut être trouvé à Un programme simple pour les valeurs de nœud et de nœud CRUD du fichier xml et il y a beaucoup d'exemples supplémentaires dans le manuel PHP .

Bibliothèques tierces (basées sur libxml)

Si vous préférez utiliser une libxml tierce, je vous suggère d'utiliser une bibliothèque qui utilise réellement DOM / libxml dessous de l'analyse des chaînes.

FluentDom

FluentDOM fournit une interface XML fluide de type jQuery pour le DOMDocument en PHP. Les sélecteurs sont écrits en XPath ou CSS (en utilisant un convertisseur CSS vers XPath). Les versions actuelles étendent le DOM implémentant des interfaces standard et ajoutent des fonctionnalités du DOM Living Standard. FluentDOM peut charger des formats tels que JSON, CSV, JsonML, RabbitFish et autres. Peut être installé via Composer.

HtmlPageDom

Wa72 \ HtmlPageDom` est une bibliothèque PHP pour la manipulation facile de documents HTML en utilisant Il nécessite DomCrawler de composants Symfony2 pour traverser l'arborescence DOM et l'étend en ajoutant des méthodes pour manipuler l'arborescence DOM des documents HTML.

phpQuery (non mis à jour pour les années)

phpQuery est une API Document DOM (Document Object Model) pilotée par un sélecteur CSS3 côté serveur, basée sur la bibliothèque jQuery JavaScript écrite en PHP5 et fournit une interface de ligne de commande (CLI) supplémentaire.

Voir aussi: https://github.com/electrolinux/phpquery

Zend_Dom

Zend_Dom fournit des outils pour travailler avec des documents et des structures DOM. Actuellement, nous proposons Zend_Dom_Query, qui fournit une interface unifiée pour interroger les documents DOM en utilisant à la fois les sélecteurs XPath et CSS.

QueryPath

QueryPath est une bibliothèque PHP pour la manipulation de XML et HTML. Il est conçu pour fonctionner non seulement avec des fichiers locaux, mais également avec des services Web et des ressources de base de données. Il implémente une grande partie de l'interface jQuery (y compris les sélecteurs de style CSS), mais il est fortement adapté pour une utilisation côté serveur. Peut être installé via Composer.

fDOMDocument

fDOMDocument étend le DOM standard pour utiliser les exceptions à toutes les occasions d'erreurs au lieu des avertissements ou des avis PHP. Ils ajoutent également diverses méthodes et raccourcis personnalisés pour plus de commodité et pour simplifier l'utilisation de DOM.

sabre/xml

sabre / xml est une bibliothèque qui enveloppe et étend les classes XMLReader et XMLWriter pour créer un simple système de mappage "xml to object / array" et un motif de conception. Écrire et lire du XML est un passage unique et peut donc être rapide et nécessiter peu de mémoire sur les gros fichiers xml.

FluidXML

FluidXML est une bibliothèque PHP pour manipuler XML avec une API concise et fluide. Il exploite XPath et le modèle de programmation fluide pour être amusant et efficace.

3ème partie (pas basée sur libxml)

L'avantage de développer sur DOM / libxml est que vous obtenez de bonnes performances dès la sortie de la boîte car vous utilisez une extension native. Cependant, toutes les bibliothèques tierces ne suivent pas cette voie. Certains d'entre eux énumérés ci-dessous

PHP Simple HTML DOM Parser

  • Un analyseur HTML DOM écrit en PHP5 + vous permet de manipuler HTML de façon très simple!
  • Nécessite PHP 5+.
  • Supporte le HTML invalide.
  • Trouver des balises sur une page HTML avec des sélecteurs comme jQuery.
  • Extraire le contenu de HTML dans une seule ligne.

Je ne recommande généralement pas cet analyseur. La base de code est horrible et l'analyseur lui-même est plutôt lent et a faim de mémoire. Tous les sélecteurs jQuery (tels que les sélecteurs enfants ) ne sont pas tous disponibles. N'importe quelle bibliothèque basée sur libxml devrait surclasser cela facilement.

PHP Html Parser

PHPHtmlParser est un analyseur html simple et flexible qui vous permet de sélectionner des tags en utilisant n'importe quel sélecteur css, comme jQuery. Le but est d'aider au développement d'outils qui nécessitent un moyen rapide et facile d'éliminer le HTML, que ce soit valide ou non! Ce projet a été originalement supporté par sunra / php-simple-html-dom-parser mais le support semble s'être arrêté donc ce projet est mon adaptation de son travail précédent.

Encore une fois, je ne recommanderais pas cet analyseur. C'est plutôt lent avec une utilisation élevée du processeur. Il n'y a également aucune fonction pour effacer la mémoire des objets DOM créés. Ces problèmes s'échelonnent particulièrement avec les boucles imbriquées. La documentation elle-même est inexacte et mal orthographiée, sans réponses aux correctifs depuis le 14 avril 16.

Ganon

  • Un tokenizer universel et HTML / XML / RSS DOM Parser
    • Capacité à manipuler des éléments et leurs attributs
    • Prend en charge HTML et UTF8 non valides
  • Peut effectuer des requêtes de type CSS3 avancées sur les éléments (comme jQuery - espaces de noms supportés)
  • Un embellisseur HTML (comme HTML Tidy)
    • Réduire le CSS et Javascript
    • Trier les attributs, modifier le casse des caractères, corriger l'indentation, etc.
  • Extensible
    • Analyse de documents à l'aide de rappels basés sur le caractère / jeton en cours
    • Opérations séparées dans des fonctions plus petites pour un dépassement facile
  • Rapide et facile

Je ne l'ai jamais utilisé. Je ne peux pas dire si c'est bon.

HTML 5

Vous pouvez utiliser ce qui précède pour analyser HTML5, mais il peut y avoir des bizarreries en raison du balisage HTML5. Donc, pour HTML5, vous voulez utiliser un analyseur dédié, comme

html5lib

Implémentation Python et PHP d'un analyseur HTML basé sur la spécification WHATWG HTML5 pour une compatibilité maximale avec les principaux navigateurs Web de bureau.

Nous pourrions voir plus d'analyseurs dédiés une fois que HTML5 sera finalisé. Il y a aussi un article de blog par le W3 intitulé How-To pour l'analyse HTML 5 qui mérite d'être vérifié.

Services Web

Si vous n'avez pas envie de programmer PHP, vous pouvez également utiliser les services Web. En général, j'ai trouvé très peu d'utilité pour ceux-ci, mais c'est juste moi et mes cas d'utilisation.

YQL

Le service Web YQL permet aux applications d'interroger, de filtrer et de combiner des données provenant de différentes sources sur Internet. Les instructions YQL ont une syntaxe de type SQL, familière à tout développeur ayant une expérience de base de données.

ScraperWiki .

L'interface externe de ScraperWiki vous permet d'extraire des données sous la forme que vous souhaitez utiliser sur le web ou dans vos propres applications. Vous pouvez également extraire des informations sur l'état de tout racleur.

Expressions régulières

Dernier et le moins recommandé , vous pouvez extraire des données à partir du HTML avec des expressions régulières . En général, l'utilisation d'expressions régulières sur HTML est déconseillée.

La plupart des extraits que vous trouverez sur le Web pour faire correspondre le balisage sont fragiles. Dans la plupart des cas, ils ne travaillent que pour un élément HTML très particulier. De minuscules modifications de balisage, telles que l'ajout d'espaces, l'ajout ou la modification d'attributs dans une balise, peuvent entraîner l'échec de RegEx lorsqu'il n'est pas correctement écrit. Vous devriez savoir ce que vous faites avant d'utiliser RegEx sur HTML.

Les parseurs HTML connaissent déjà les règles syntaxiques du HTML. Des expressions régulières doivent être enseignées pour chaque nouveau RegEx que vous écrivez. Les RegEx sont bien dans certains cas, mais cela dépend vraiment de votre cas d'utilisation.

Vous pouvez écrire des analyseurs plus fiables , mais écrire un analyseur personnalisé complet et fiable avec des expressions régulières est une perte de temps lorsque les bibliothèques mentionnées ci-dessus existent déjà et font un bien meilleur travail à ce sujet.

Voir aussi Parsing Html The Cthulhu Way

Livres

Si vous voulez dépenser de l'argent, jetez un oeil à

Je ne suis pas affilié à PHP Architect ou aux auteurs.

https://code.i-harness.com

Comment peut-on analyser HTML / XML et en extraire des informations?



Ceci est communément appelé grattage d'écran , soit dit en passant. La bibliothèque que j'ai utilisée pour cela est Simple HTML Dom Parser .


Cela ressemble à une bonne description de la technologie W3C XPath . Il est facile d'exprimer des requêtes comme "renvoyer tous les attributs href dans les balises img qui sont imbriquées dans les éléments <foo><bar><baz> elements ." N'étant pas un buff PHP, je ne peux pas vous dire sous quelle forme XPath peut être disponible. Si vous pouvez appeler un programme externe pour traiter le fichier HTML, vous devriez pouvoir utiliser une version en ligne de commande de XPath. Pour une intro rapide, voir XPath .


Il existe plusieurs façons de traiter les DOM HTML / XML dont la plupart ont déjà été mentionnés. Par conséquent, je ne ferai aucune tentative d'énumérer ceux-ci moi-même.

Je veux simplement ajouter que je préfère personnellement utiliser l'extension DOM et pourquoi:

  • iit utilise de manière optimale l'avantage de performance du code C sous-jacent
  • c'est OO PHP (et ça me permet de le sous-classer)
  • c'est plutôt bas niveau (ce qui me permet de l'utiliser comme base non gonflée pour un comportement plus avancé)
  • il donne accès à toutes les parties du DOM (contrairement à SimpleXml, qui ignore certaines des fonctionnalités XML moins connues)
  • il a une syntaxe utilisée pour l'exploration DOM qui est similaire à la syntaxe utilisée dans le langage JavaScript natif.

Et même si la possibilité d'utiliser des sélecteurs CSS pour DOMDocument me manque, il existe un moyen plutôt simple et pratique d'ajouter cette fonctionnalité: sous- DOMDocument le DOMDocument et ajouter des méthodes querySelectorAll et querySelector type querySelectorAll à votre sous-classe.

Pour analyser les sélecteurs, je recommande d'utiliser le composant CssSelector très minimaliste du framework Symfony . Ce composant traduit simplement les sélecteurs CSS en sélecteurs XPath, qui peuvent ensuite être introduits dans un chemin DOMX pour récupérer la liste de nœuds correspondante.

Vous pouvez ensuite utiliser cette sous-classe (encore très bas niveau) comme base pour plus de classes de haut niveau, destinées par exemple à. analyser des types de XML très spécifiques ou ajouter plus de comportement de type jQuery.

Le code ci-dessous vient directement dans ma PHPPowertools/DOM-Query et utilise la technique que j'ai décrite.

Pour l'analyse HTML:

namespace PowerTools;

use \Symfony\Component\CssSelector\CssSelector as CssSelector;

class DOM_Document extends \DOMDocument {
    public function __construct($data = false, $doctype = 'html', $encoding = 'UTF-8', $version = '1.0') {
        parent::__construct($version, $encoding);
        if ($doctype && $doctype === 'html') {
            @$this->loadHTML($data);
        } else {
            @$this->loadXML($data);
        }
    }

    public function querySelectorAll($selector, $contextnode = null) {
        if (isset($this->doctype->name) && $this->doctype->name == 'html') {
            CssSelector::enableHtmlExtension();
        } else {
            CssSelector::disableHtmlExtension();
        }
        $xpath = new \DOMXpath($this);
        return $xpath->query(CssSelector::toXPath($selector, 'descendant::'), $contextnode);
    }

    [...]

    public function loadHTMLFile($filename, $options = 0) {
        $this->loadHTML(file_get_contents($filename), $options);
    }

    public function loadHTML($source, $options = 0) {
        if ($source && $source != '') {
            $data = trim($source);
            $html5 = new HTML5(array('targetDocument' => $this, 'disableHtmlNsInDom' => true));
            $data_start = mb_substr($data, 0, 10);
            if (strpos($data_start, '<!DOCTYPE ') === 0 || strpos($data_start, '<html>') === 0) {
                $html5->loadHTML($data);
            } else {
                @$this->loadHTML('<!DOCTYPE html><html><head><meta charset="' . $encoding . '" /></head><body></body></html>');
                $t = $html5->loadHTMLFragment($data);
                $docbody = $this->getElementsByTagName('body')->item(0);
                while ($t->hasChildNodes()) {
                    $docbody->appendChild($t->firstChild);
                }
            }
        }
    }

    [...]
}

Voir aussi Analyser des documents XML avec des sélecteurs CSS par le créateur de Symfony, Fabien Potencier, sur sa décision de créer le composant CssSelector pour Symfony et comment l'utiliser.


Il y a plusieurs raisons de ne pas analyser le HTML par une expression régulière. Mais, si vous avez un contrôle total de ce que HTML sera généré, alors vous pouvez faire avec une simple expression régulière.

Ci-dessus, c'est une fonction qui analyse HTML par expression régulière. Notez que cette fonction est très sensible et exige que le HTML obéisse à certaines règles, mais cela fonctionne très bien dans de nombreux scénarios. Si vous voulez un analyseur simple, et que vous ne voulez pas installer de librairies, essayez ceci:

function array_combine_($keys, $values) {
    $result = array();
    foreach ($keys as $i => $k) {
        $result[$k][] = $values[$i];
    }
    array_walk($result, create_function('&$v', '$v = (count($v) == 1)? array_pop($v): $v;'));

    return $result;
}

function extract_data($str) {
    return (is_array($str))
        ? array_map('extract_data', $str)
        : ((!preg_match_all('#<([A-Za-z0-9_]*)[^>]*>(.*?)</\1>#s', $str, $matches))
            ? $str
            : array_map(('extract_data'), array_combine_($matches[1], $matches[2])));
}

print_r(extract_data(file_get_contents("http://www.google.com/")));

J'ai créé une bibliothèque appelée HTML5DOMDocument qui est disponible gratuitement sur https://github.com/ivopetkov/html5-dom-document-php

Il supporte aussi les sélecteurs de requêtes qui, je pense, seront extrêmement utiles dans votre cas. Voici un exemple de code:

$dom = new IvoPetkov\HTML5DOMDocument();
$dom->loadHTML('<!DOCTYPE html><html><body><h1>Hello</h1><div class="content">This is some text</div></body></html>');
echo $dom->querySelector('h1')->innerHTML;

J'ai créé une bibliothèque nommée PHPPowertools/DOM-Query , qui vous permet d'explorer des documents HTML5 et XML comme vous le faites avec jQuery.

Sous le capot, il utilise symfony / DomCrawler pour la conversion des sélecteurs CSS en sélecteurs XPath . Il utilise toujours le même document DomDocument, même lors du passage d'un objet à un autre, pour garantir des performances correctes.

Exemple d'utilisation:

namespace PowerTools;

// Get file content
$htmlcode = file_get_contents('https://github.com');

// Define your DOMCrawler based on file string
$H = new DOM_Query($htmlcode);

// Define your DOMCrawler based on an existing DOM_Query instance
$H = new DOM_Query($H->select('body'));

// Passing a string (CSS selector)
$s = $H->select('div.foo');

// Passing an element object (DOM Element)
$s = $H->select($documentBody);

// Passing a DOM Query object
$s = $H->select( $H->select('p + p'));

// Select the body tag
$body = $H->select('body');

// Combine different classes as one selector to get all site blocks
$siteblocks = $body->select('.site-header, .masthead, .site-body, .site-footer');

// Nest your methods just like you would with jQuery
$siteblocks->select('button')->add('span')->addClass('icon icon-printer');

// Use a lambda function to set the text of all site blocks
$siteblocks->text(function( $i, $val) {
    return $i . " - " . $val->attr('class');
});

// Append the following HTML to all site blocks
$siteblocks->append('<div class="site-center"></div>');

// Use a descendant selector to select the site's footer
$sitefooter = $body->select('.site-footer > .site-center');

// Set some attributes for the site's footer
$sitefooter->attr(array('id' => 'aweeesome', 'data-val' => 'see'));

// Use a lambda function to set the attributes of all site blocks
$siteblocks->attr('data-val', function( $i, $val) {
    return $i . " - " . $val->attr('class') . " - photo by Kelly Clark";
});

// Select the parent of the site's footer
$sitefooterparent = $sitefooter->parent();

// Remove the class of all i-tags within the site's footer's parent
$sitefooterparent->select('i')->removeAttr('class');

// Wrap the site's footer within two nex selectors
$sitefooter->wrap('<section><div class="footer-wrapper"></div></section>');

[...]

Méthodes supportées:

  1. Renommé 'select', pour des raisons évidentes
  2. Renommé 'void', puisque 'empty' est un mot réservé en PHP

REMARQUE :

La bibliothèque inclut également son propre autochargeur de configuration zéro pour les bibliothèques compatibles PSR-0. L'exemple inclus devrait fonctionner hors de la boîte sans aucune configuration supplémentaire. Alternativement, vous pouvez l'utiliser avec le compositeur.


Je recommande PHP Simple HTML DOM Parser .

Il a vraiment de belles fonctionnalités, comme:

foreach($html->find('img') as $element)
       echo $element->src . '<br>';

Le Symfony a des bundles qui peuvent analyser le HTML, et vous pouvez utiliser le style CSS pour sélectionner les DOM au lieu d'utiliser XPath .


Oui, vous pouvez utiliser simple_html_dom à cette fin. Cependant, j'ai beaucoup travaillé avec le simple_html_dom, en particulier pour la mise au rebut sur le web, et je l'ai trouvé trop vulnérable. Il fait le travail de base mais je ne le recommanderai pas de toute façon.

Je n'ai jamais utilisé curl pour le but, mais ce que j'ai appris est que curl peut faire le travail beaucoup plus efficacement et est beaucoup plus solide.

Veuillez consulter ce lien: scraping-websites-with-curl


Pour 1a et 2: je voterais pour la nouvelle classe DOMCrawler de Symfony Componet ( DomCrawler ). Cette classe permet des requêtes similaires aux sélecteurs CSS. Jetez un oeil à cette présentation pour des exemples concrets: news-of-the-symfony2-world .

Le composant est conçu pour fonctionner de manière autonome et peut être utilisé sans Symfony.

Le seul inconvénient est qu'il ne fonctionnera qu'avec PHP 5.3 ou plus récent.


Simple HTML DOM est un excellent parseur open-source:

simplehtmldom.sourceforge

Il traite les éléments DOM de manière orientée objet, et la nouvelle itération a beaucoup de couverture pour le code non conforme. Il y a aussi d'excellentes fonctions comme celles que vous verriez en JavaScript, comme la fonction "find", qui retournera toutes les occurrences d'éléments de ce nom de tag.

Je l'ai utilisé dans un certain nombre d'outils, en le testant sur de nombreux types de pages Web, et je pense que cela fonctionne très bien.


Une approche générale que je n'ai pas vu mentionné ici est d'exécuter HTML via Tidy , qui peut être configuré pour cracher XHTML garanti-valide. Vous pouvez ensuite utiliser n'importe quelle ancienne bibliothèque XML.

Mais pour votre problème spécifique, vous devriez jeter un coup d'oeil à ce projet: http://fivefilters.org/content-only/ - c'est une version modifiée de l'algorithme de Readability , qui est conçu pour extraire juste le contenu textuel (pas les en-têtes) et pieds de page) d'une page.



Vous pouvez essayer d'utiliser quelque chose comme HTML Tidy pour nettoyer tout code HTML "cassé" et convertir le code HTML en XHTML, que vous pouvez ensuite analyser avec un analyseur XML.


XML_HTMLSax est plutôt stable - même s'il n'est plus maintenu. Une autre option pourrait être de vous rediriger HTML via Html Tidy , puis de l'analyser avec des outils XML standard.


Advanced Html Dom est un simple remplacement de DOM HTML qui offre la même interface, mais basé sur DOM, ce qui signifie qu'aucun problème de mémoire associé ne se produit.

Il a également un support CSS complet, y compris les extensions jQuery .


Pourquoi vous ne devriez pas et quand vous devriez utiliser des expressions régulières?

Tout d'abord, un terme commun mal utilisé: Les expressions rationnelles ne sont pas pour "l' analyse " HTML. Les regex peuvent cependant " extraire " des données. L'extraction est ce pour quoi ils sont faits. L'inconvénient majeur de l'extraction HTML regex par rapport aux kits d'outils SGML ou aux analyseurs XML de base est leur effort syntaxique et leur fiabilité variable.

Considérez que faire une regex d'extraction HTML assez fiable:

<a\s+class="?playbutton\d?[^>]+id="(\d+)".+?    <a\s+class="[\w\s]*title
[\w\s]*"[^>]+href="(http://[^">]+)"[^>]*>([^<>]+)</a>.+?

est beaucoup moins lisible qu'un simple équivalent de phpQuery ou de QueryPath:

$div->find(".stationcool a")->attr("title");

Il existe cependant des cas d'utilisation spécifiques où ils peuvent aider.

  • Beaucoup de frontaux DOM traversal ne révèlent pas les commentaires HTML <!-- , qui sont cependant parfois les ancres les plus utiles pour l'extraction. En particulier les variations pseudo-HTML <$var> ou les résidus SGML sont faciles à apprivoiser avec les expressions rationnelles.
  • Souvent, les expressions régulières peuvent sauver le post-traitement. Cependant, les entités HTML nécessitent souvent un gardiennage manuel.
  • Et enfin, pour des tâches extrêmement simples comme l'extraction de <img src = urls, elles sont en fait un outil probable. L'avantage de la rapidité par rapport aux parseurs SGML / XML vient surtout à jouer pour ces procédures d'extraction très basiques.

Il est même parfois conseillé de pré-extraire un extrait de code HTML en utilisant des expressions régulières / /<!--CONTENT-->(.+?)<!--END-->/ -- /<!--CONTENT-->(.+?)<!--END-->/ --> (. /<!--CONTENT-->(.+?)<!--END-->/ - /<!--CONTENT-->(.+?)<!--END-->/ et de traiter le reste en utilisant les interfaces de l'analyseur HTML plus simples.

Note: J'ai réellement cette app , où j'emploie l'analyse XML et les expressions régulières alternativement. La semaine dernière, l'analyse syntaxique de PyQuery a été interrompue et l'expression régulière fonctionnait encore. Oui bizarre, et je ne peux pas l'expliquer moi-même. Mais c'est arrivé.
Donc, s'il vous plaît, ne votez pas sur les considérations du monde réel, juste parce que cela ne correspond pas à la règle regex = evil. Mais ne votons pas trop. C'est juste un sidenote pour ce sujet.





html-parsing