O LWP é todo implementado em Perl, então não ganha do Curl que é implementado em C por exemplo, mas nunca se esqueçam:<div> "Otimização prematura é a raiz para todo mal"</div><div> --Chico Xavier</div><div>Ops, Donald Knuth :P</div>
<div><br><div><br><div class="gmail_quote">2010/12/21 breno <span dir="ltr"><<a href="mailto:breno@rio.pm.org">breno@rio.pm.org</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
2010/12/20 Stanislaw Pusep <<a href="mailto:creaktive@gmail.com">creaktive@gmail.com</a>>:<br>
<div class="im">> Dependendo da complexidade, talvez compense usar diretamente o LWP, que é o<br>
> backend do WWW::Mechanize:<br>
> <a href="http://search.cpan.org/~gaas/libwww-perl-5.837/lib/LWP.pm" target="_blank">http://search.cpan.org/~gaas/libwww-perl-5.837/lib/LWP.pm</a><br>
> WWW::Mechanize é muito power, mas também lerdo e pesado :(<br>
><br>
<br>
</div>Acho que alguns diriam o mesmo do LWP, né Lorn? ;-)<br>
<br>
De qualquer forma, se o Eduardo está em seus primeiros passos com<br>
Perl, recomendo trabalhar com APIs amigáveis e o mais alto-nível<br>
possível.<br>
<br>
O mech é bom se vc se entende com a API dele, mas lembre-se que na<br>
hora de fazer o parsing do conteúdo vc precisará de outra ferramenta<br>
(evite expressões regulares em cima do $mech->content a menos que vc<br>
*realmente* saiba o q está fazendo:<br>
<br>
<br>
-------------8<-------------<br>
use strict;<br>
use warnings;<br>
<br>
use WWW::Mechanize;<br>
use HTML::TreeBuilder;<br>
<br>
my $mech = WWW::Mechanize->new;<br>
$mech->get( "<a href="http://exemplo.com" target="_blank">http://exemplo.com</a>" );<br>
<br>
my $html = HTML::TreeBuilder->new_from_content( $mech->content );<br>
------------->8-------------<br>
<br>
Daí é só consultar a documentação do WWW::Mechanize para navegar pelo<br>
conteúdo (submeter formulários, seguir links, etc), e do HTML::Element<br>
pra analisar o HTML retornado. Há ainda o WWW::Mechanize::TreeBuilder,<br>
que combina os dois módulos acima assim vc não precisa do passo<br>
intermediário e pode fazer tudo a partir de 1 objeto apenas (em vez de<br>
2 como acima)<br>
<br>
Se preferir trabalhar com XPath (mais fácil pra muita gente), pode<br>
trocar no exemplo acima "HTML::TreeBuilder" por<br>
"HTML::TreeBuilder::XPath" ou usar o HTML::Query, ou então o... bom,<br>
tem sempre mais de uma maneira de fazer as coisas :-)<br>
<br>
Mas pra XPath o que eu recomendo mesmo é usar algo próprio, como o<br>
Web::Scraper ou - mais amigável - o Scrapy:<br>
<br>
-------------8<-------------<br>
use strict;<br>
use warnings;<br>
<br>
use Scrapy ':syntax';<br>
<br>
crawl '<a href="http://search.cpan.org/recent" target="_blank">http://search.cpan.org/recent</a>', {<br>
'#cpansearch li a' => sub {<br>
print shift->text, "\n";<br>
}<br>
};<br>
------------->8-------------<br>
<br>
<br>
[]s<br>
<font color="#888888"><br>
-b<br>
</font><div><div></div><div class="h5">=begin disclaimer<br>
Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>lorn at lornlab dot org<br>Lindolfo "Lorn" Rodrigues<br><br>
</div></div>