Je commence juste à partir à Perl et j'ai écrit un script simple pour faire une gratte Web. J'utilise www :: Mécaniser et HTML :: TreeBuilder pour faire la plupart des travaux, mais j'ai eu des problèmes. J'ai le suivant HTML:
my $tree = HTML::TreeBuilder->new_from_url( $url ); my @data = $tree->find('td class = "wins"');
4 Réponses :
J'utilise excellent (mais un peu lent parfois) html :: TreeBuilder :: XPath code> Module:
my $tree = HTML::TreeBuilder::XPath->new_from_content( $mech->content() );
my @data = $tree->findvalues('//table[ @class = "winsTable" ]//td[@class = "wins"]');
Vous pouvez utiliser la méthode code> code> pour trouver la balise et les attributs spécifiques que vous recherchez. Ceci est dans le module HTML :: ELEMENT CODE> (qui est importé par
HTML :: TreeBuilder code>).
my $data = $tree->look_down(
_tag => 'td',
class => 'wins'
);
print $data->content_list, "\n" if $data; #prints '15' using the given HTML
$data = $tree->look_down(
_tag => 'td',
class => 'losses'
);
print $data->content_list, "\n" if $data; #prints nothing using the given HTML
J'utilise le même scénario, mais iam Obtenir l'erreur suivante: nombre impair d'éléments dans la mission de hachage à /usr/local/share/perl5/html/treebuilder.pm ligne 207
(C'est une sorte de réponse supplémentaire à Dspain's ) P>
En fait, vous avez manqué une place dans le HTML :: TreeBuilder Documentation où il est écrit, P>
Objets de cette classe héritent des méthodes de HTML :: Parser et HTML :: Élément. Les méthodes héritées de HTML :: analyseur sont utilisées pour la construction de l'arborescence HTML et les méthodes héritées de HTML :: Elément sont ce que vous utilisez pour scruter l'arborescence. Outre cette documentation (HTML :: TREBERBUILDER), vous devez également lire attentivement la documentation HTML :: Elément STROND>, et également écrémer la documentation HTML :: Parser - probablement uniquement ses méthodes d'analyse et d'analyse. . p> blockQuote>
(Notez que la mise en forme audacieuse est la mine, ce n'est pas dans la documentation) P>
Cela indique que vous devriez lire HTML: : La documentation de l'élément aussi, où vous trouverez le
Recherche code> méthode
qui dit p>Ceci est juste un alias à la recherche_by_tag_name p> blockQuote>
Cela devrait vous dire qu'il ne fonctionne pas pour les noms de classe, mais sa description mentionne également un
look_down code> méthode
qui peut être trouvé légèrement plus bas. Si vous regardez l'exemple, vous verriez que cela fait ce que vous voulez. Et La réponse de Dspain montre précisément comment dans votre cas. P>Pour être juste, la documentation n'est pas si facile à naviguer. p>
J'ai trouvé le Ceci Link le plus utile pour me dire comment extraire des informations spécifiques du contenu HTML. J'ai utilisé le dernier exemple sur la page:
use v5.10; use WWW::Mechanize; use WWW::Mechanize::TreeBuilder; my $mech = WWW::Mechanize->new; WWW::Mechanize::TreeBuilder->meta->apply($mech); $mech->get( 'http://htmlparsing.com/' ); # Find all <h1> tags my @list = $mech->find('h1'); # or this way <----- I found this way very useful to pinpoint exact classes with in some html my @list = $mech->look_down('_tag' => 'h1', 'class' => 'main_title'); # Now just iterate and process foreach (@list) { say $_->as_text(); }