[SP-pm] use WWW::Mechanize

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


Ah, esqueci substitua todos os espaços por "+"(sem aspas).
Exemplo: Gabriel+Vieira.

Obrigado a todos.

2008/9/21 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani em gmail.com>

> 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/
> ------------------------------------------------------------
>



-- 
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/5af47337/attachment-0001.html>


More information about the SaoPaulo-pm mailing list