Comme il s'agit de HTML, vous voulez probablement que le module XPath soit conçu pour fonctionner avec HTML, HTML::TreeBuilder::XPath.
D'abord, vous devrez analyser votre chaîne en utilisant les méthodes HTML :: TreeBuilder. En supposant que le contenu de votre page Web est une variable nommée $content
, faites comme ceci:
my $tree = HTML::TreeBuilder->new;
$tree->parse_file($file_name);
Maintenant, vous pouvez utiliser des expressions XPath pour obtenir itérateurs sur les nœuds qui vous passionnent. Cette première expression obtient tous les td
nœuds qui sont en tr
dans un table
dans le body
dans l'élément html
:
my $tdNodes = $tree->findnodes('/html/body/table/tr/td');
Enfin, vous pouvez simplement itérer sur tous les noeuds dans une boucle pour trouver ce que vous voulez:
foreach my $node ($tdNodes->get_nodelist) {
my $data = $node->findvalue('.'); // the content of the node
print "$data\n";
}
Voir la documentation HTML::TreeBuilder pour plus sur ses méthodes et la documentation NodeSet pour savoir comment utiliser l'objet de résultat NodeSet. w3schools a un didacticiel XPath passable here. Avec tout cela, vous devriez être en mesure d'effectuer une analyse HTML assez robuste pour récupérer tout élément que vous voulez. Vous pouvez même spécifier des classes, des identifiants et plus dans vos requêtes XPath pour être vraiment précis sur les nœuds que vous voulez. À mon avis, l'analyse du code HTML à l'aide de cette bibliothèque XPath modifiée est beaucoup plus rapide et plus facile à gérer que la gestion d'une série de regex uniques.
+1 pour avoir un exemple de code. –