[SP-pm] use WWW::Mechanize

Gabriel Vieira gabriel.vieira at gmail.com
Sat Sep 20 22:14:28 PDT 2008


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


More information about the SaoPaulo-pm mailing list