[SP-pm] use WWW::Mechanize

Alexei Znamensky russoz at gmail.com
Sat Sep 20 22:13:07 PDT 2008


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"
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20080921/120fb0e2/attachment.html>


More information about the SaoPaulo-pm mailing list