[SP-pm] Ajuda no Perl!

breno breno at rio.pm.org
Tue Dec 21 07:07:17 PST 2010


2010/12/20 Stanislaw Pusep <creaktive em gmail.com>:
> 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


More information about the SaoPaulo-pm mailing list