[SP-pm] use WWW::Mechanize

Daniel de Oliveira Mantovani daniel.oliveira.mantovani at gmail.com
Sun Sep 21 09:03:56 PDT 2008


O programa pronto:
#!/usr/bin/perl

use strict;
use warnings;
use WWW::Mechanize;

print "Palavra chave = > ";
chomp (my $dork = <>);
die "Operação não suportada" if $dork =~ /Eden\+Cardim/;
print "Buscando por $dork\n";
open SAVE, ">>","save.txt" or die "can't open";
my $i = 100;
my $quanto = ();
while ($i <= 500){
$i += 100;
my $google = WWW::Mechanize->new();
my $url = "
http://www.google.com.br/search?as_q=inurl%3A$dork&hl=pt-BR&num=100&btnG=Pesquisa+Google&as_epq=&as_oq=&as_eq=&lr=&cr=&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=&as_rights=&safe=images
";
$google->agent_alias( 'Linux Mozilla' );
$google->get($url);
my $busca = $google->content();
my @matchs = $busca=~ /<h3 class=r><a href="(.+?)"/g;
$quanto += scalar(@matchs);
print SAVE $_,$/ foreach(@matchs)
}
print "Achou $quanto resultados\n";

2008/9/21 Gabriel Vieira <gabriel.vieira em gmail.com>

> Ele já foi alertado.
> Mas é bom que ele está entendendo como as coisas funcionam.
>
> 2008/9/21 Alexei Znamensky <russoz em gmail.com>:
> > e assim começa a lenta e dolorosa caminhada para o inferno do parse de
> > markup languages...
> >
> > 2008/9/20 Gabriel Vieira <gabriel.vieira em gmail.com>
> >>
> >> Daniel,
> >>
> >> isso ocorre pelo simples motivo de existir nenhuma a tag <a
> >> href="qlqrcoisa" mais_atributos_aqui>. Sendo assim o match vai agrupar
> >> em $1 tudo que está entre <a href=" e ">, ou seja, o match só irá
> >> parar quando encontrar um "> e isso demora um pouco a acontecer, tanto
> >> que o seu retorno para $1 é imenso.
> >>
> >> Tente:
> >> ---------------------8<---------------------
> >> print $1 for $busca=~ /<a href="http:\/\/(.+?)"/;
> >> --------------------->8---------------------
> >>
> >> Ou:
> >> ---------------------8<---------------------
> >> print $1 for $busca=~ /<a href="http:\/\/(.+?)".*?>/;
> >> --------------------->8---------------------
> >>
> >> Ou para ficar mais legível:
> >> ---------------------8<---------------------
> >> print $1 for $busca =~ m#<a href="http://(.+?)".*?>#;
> >> --------------------->8---------------------
> >>
> >> Lembre-se que esse match retornará apenas 1 único resultado por ele
> >> não possuir o operador 'g' ao fim da instrução.
> >>
> >> Utilizando-se da opção 'g' e do for ele ele irá retornar a $1 o valor
> >> do último match com sucesso a quantidade de vezes que os matchs
> >> obtiveram sucesso, no caso o link para a Folha On Line.
> >>
> >> Sendo assim indico o uso do while. "Mas com o while ele não entraria
> >> em loop infinito já que sempre vai existir o match na string busca?".
> >> Se utilizarmos o operador 'c', não.
> >>
> >> Logo, teremos:
> >> ---------------------8<---------------------
> >> print $1,$/ while $busca =~ m#<a href="http://(.+?)".*?>#gc;
> >> --------------------->8---------------------
> >>
> >> Uma última dica legal, caso queira gerar um array com todos os matchs
> >> bastaria o seguinte:
> >> ---------------------8<---------------------
> >> my @matchs = $busca =~ m#<a href="http://(.+?)".*?>#g;
> >> ---------------------8<---------------------
> >>
> >> Mais informações: perldoc perlop
> >>
> >> Abraços,
> >>
> >> 2008/9/19 Daniel de Oliveira Mantovani
> >> <daniel.oliveira.mantovani em gmail.com>:
> >> > Fiz o que você disse do while, e deu outro erro.
> >> >
> >> > Error: no "print" mailcap rules found for type "text/x-perl"
> >> >
> >> > Não tenho ideia do que seja "mailcap".
> >> >
> >> >
> >> > 2008/9/19 Daniel de Oliveira Mantovani
> >> > <daniel.oliveira.mantovani em gmail.com>
> >> >>
> >> >> #!/usr/bin/perl
> >> >>
> >> >> use strict;
> >> >> use warnings;
> >> >> use WWW::Mechanize;
> >> >>
> >> >> my $google = WWW::Mechanize->new();
> >> >> my $url =
> >> >>
> >> >> '
> http://www.google.com.br/search?hl=pt-BR&q=nasa&btnG=Pesquisa+Google&meta
> ';
> >> >> $google->get($url);
> >> >> my $busca = $google->content();
> >> >> print $1 for $busca=~ /<a href="http:\/\/(.+?)">/;
> >> >>
> >> >> Desculpa pela demora.
> >> >> A coisa que não entra na minha cabeça é eu ponho print $1, e imprime
> >> >> tudo
> >> >> que não está entre os parênteses.
> >> >>
> >> >> 2008/9/19 André Garcia Carneiro <andre.garcia.carneir em terra.com.br>
> >> >>>
> >> >>> Daniel...
> >> >>>
> >> >>>
> >> >>> No while que eu enviei. Tira o 'm'. Esse é um problema. Mas devem
> ter
> >> >>> mais no código, então manda pra mim, se
> >> >>> puder é claro, caso contrário posta aqui. Não posso entrar no IRC
> >> >>> agora,
> >> >>> mas assim q tiver uma brecha aqui no
> >> >>> meu trabalho eu te mando a correção. Prometo testar dessa
> vez...rsrsr!
> >> >>>
> >> >>>
> >> >>> Cheers!
> >> >>>
> >> >>>
> >> >>> ---------- Cabeçalho original -----------
> >> >>>
> >> >>> De: saopaulo-pm-bounces+andre.garcia.carneir=terra.com.br em pm.org
> >> >>> Para: "saopaulo-pm" saopaulo-pm em mail.pm.org
> >> >>> Cópia:
> >> >>> Data: Fri, 19 Sep 2008 15:43:47 -0300
> >> >>> Assunto: Re: [SP-pm] use WWW::Mechanize
> >> >>>
> >> >>> >
> >> >>> > Falha minha. Esqueci disso...
> >> >>> >
> >> >>> >
> >> >>> > E nao testei o código também.
> >> >>> >
> >> >>> >
> >> >>> > Sorry!
> >> >>> >
> >> >>> >
> >> >>> > ---------- Cabeçalho original -----------
> >> >>> >
> >> >>> > De: saopaulo-pm-bounces+andre.garcia.carneir=terra.com.br em pm.org
> >> >>> > Para: saopaulo-pm em mail.pm.org
> >> >>> > Cópia:
> >> >>> > Data: Fri, 19 Sep 2008 14:49:28 -0300
> >> >>> > Assunto: Re: [SP-pm] use WWW::Mechanize
> >> >>> >
> >> >>> > > Você pode fazer regexes com m/ regexp aqui / .
> >> >>> > >
> >> >>> > > Também pode com m{ .... } , m@ ..... @ ,  m( .... ) , etc..
> >> >>> > >
> >> >>> > > Mas se você tá usando m/ ..... / , o que acontece quando tem
> mais
> >> >>> > > um
> >> >>> > > "/" no
> >> >>> > > meio da regex ? O perl vai achar que a regexp acabou ali. Então,
> >> >>> > > ou
> >> >>> > > usa-se
> >> >>> > > outros delimitadores, ou se escapa a "/", com uma "\", pra ele
> não
> >> >>> > > achar que
> >> >>> > > a "/" terminou a regexp:
> >> >>> > >
> >> >>> > > m/<a href="http:\/\/(.+?)"/sig
> >> >>> > >
> >> >>> > > ou
> >> >>> > >
> >> >>> > > m{<a href="http://(.+?)"}sig
> >> >>> > >
> >> >>> > > ou até mesmo
> >> >>> > >
> >> >>> > > m;<a href="http://(.+?)";sig # se você tá participando de um
> >> >>> > > concurso
> >> >>> > > de
> >> >>> > > código ofuscado :-)
> >> >>> > >
> >> >>> > > []s
> >> >>> > > Wendel
> >> >>> > >
> >> >>> > > 2008/9/19 Daniel de Oliveira Mantovani
> >> >>> > > <daniel.oliveira.mantovani em gmail.com>
> >> >>> > >
> >> >>> > > > while($string =~ m/< a href="http://(.+?)"/sig){
> >> >>> > > >     print "\n".$1; #Agora vou pegar todos!
> >> >>> > > > }
> >> >>> > > >
> >> >>> > > >
> >> >>> > > >
> >> >>> > >
> >> >>> >
> >> >>> > --
> >> >>> > André Garcia Carneiro
> >> >>> > Developer(Perl/PHP)
> >> >>> > Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org
> >> >>> >
> >> >>> > _______________________________________________
> >> >>> > SaoPaulo-pm mailing list
> >> >>> > SaoPaulo-pm em pm.org
> >> >>> > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >> >>> >
> >> >>>
> >> >>> --
> >> >>> André Garcia Carneiro
> >> >>> Developer(Perl/PHP)
> >> >>> Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org
> >> >>>
> >> >>> _______________________________________________
> >> >>> SaoPaulo-pm mailing list
> >> >>> SaoPaulo-pm em pm.org
> >> >>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> Daniel de Oliveira Mantovani
> >> >> "A sede pelo aprendizado é insaciável"
> >> >> http://mantovanihouse.blogspot.com/
> >> >> ------------------------------------------------------------
> >> >
> >> >
> >> >
> >> > --
> >> > Daniel de Oliveira Mantovani
> >> > "A sede pelo aprendizado é insaciável"
> >> > http://mantovanihouse.blogspot.com/
> >> > ------------------------------------------------------------
> >> >
> >> > _______________________________________________
> >> > SaoPaulo-pm mailing list
> >> > SaoPaulo-pm em pm.org
> >> > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >> >
> >>
> >>
> >>
> >> --
> >> Gabriel Vieira
> >> _______________________________________________
> >> SaoPaulo-pm mailing list
> >> SaoPaulo-pm em pm.org
> >> http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >
> >
> >
> > --
> > Alexei Znamensky [russoz_gmail_com] [russoz.wordpress.com]
> > [www.flickr.com/photos/alexeiz]
> > "Though we live in trying times, we're the ones who have to try"
> >
> > _______________________________________________
> > SaoPaulo-pm mailing list
> > SaoPaulo-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >
>
>
>
> --
> Gabriel Vieira
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
Daniel de Oliveira Mantovani
"A sede pelo aprendizado é insaciável"
http://mantovanihouse.blogspot.com/
------------------------------------------------------------
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20080921/9e4215ec/attachment.html>


More information about the SaoPaulo-pm mailing list