2010/12/20 Stanislaw Pusep <[email protected]>: > Dependendo da complexidade, talvez compense usar diretamente o LWP, que é o > backend do WWW::Mechanize: > http://search.cpan.org/~gaas/libwww-perl-5.837/lib/LWP.pm > WWW::Mechanize é muito power, mas também lerdo e pesado :( >
Acho que alguns diriam o mesmo do LWP, né Lorn? ;-) De qualquer forma, se o Eduardo está em seus primeiros passos com Perl, recomendo trabalhar com APIs amigáveis e o mais alto-nível possível. O mech é bom se vc se entende com a API dele, mas lembre-se que na hora de fazer o parsing do conteúdo vc precisará de outra ferramenta (evite expressões regulares em cima do $mech->content a menos que vc *realmente* saiba o q está fazendo: -------------8<------------- use strict; use warnings; use WWW::Mechanize; use HTML::TreeBuilder; my $mech = WWW::Mechanize->new; $mech->get( "http://exemplo.com" ); my $html = HTML::TreeBuilder->new_from_content( $mech->content ); ------------->8------------- Daí é só consultar a documentação do WWW::Mechanize para navegar pelo conteúdo (submeter formulários, seguir links, etc), e do HTML::Element pra analisar o HTML retornado. Há ainda o WWW::Mechanize::TreeBuilder, que combina os dois módulos acima assim vc não precisa do passo intermediário e pode fazer tudo a partir de 1 objeto apenas (em vez de 2 como acima) Se preferir trabalhar com XPath (mais fácil pra muita gente), pode trocar no exemplo acima "HTML::TreeBuilder" por "HTML::TreeBuilder::XPath" ou usar o HTML::Query, ou então o... bom, tem sempre mais de uma maneira de fazer as coisas :-) Mas pra XPath o que eu recomendo mesmo é usar algo próprio, como o Web::Scraper ou - mais amigável - o Scrapy: -------------8<------------- use strict; use warnings; use Scrapy ':syntax'; crawl 'http://search.cpan.org/recent', { '#cpansearch li a' => sub { print shift->text, "\n"; } }; ------------->8------------- []s -b =begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
