[SP-pm] Extrair conteúdo HTML. WWW::Mechanize ?

Daniel de Oliveira Mantovani daniel.oliveira.mantovani at gmail.com
Tue Oct 14 20:22:53 PDT 2008


Obrigado Breno.

Você pode trocar por algo como:


if ( $data->success() ) {
       @filmes = $data->content() =~ m{<br><i>\((.+?)\)</i></td>}
>
> gs;
> }


Não funcionou não.

para vc lidar com o caso de erro no get() que vc faz na linha acima.

Não achei o "erro" que você disse no get().

Como alternativa à regexp, você pode passear pela árvore HTML usando
HTML::TableContentParser ou com outros módulos de scraping como o
pQuery ou o Web::Scraper:

Vou tentar usar isso.

Muito obrigado Breno ^^

Abraços

2008/10/14 breno <breno em rio.pm.org>

> Daniel,
>
> infelizmente pelo que vi o site em questão usa tabelas e não trabalha
> com ids, então o scraping será mais passível de problemas (leia-se "se
> mudarem alguma coisa no layout seu script provavelmente vai parar de
> funcionar").
>
> Sobre o trecho de código:
>
> >     foreach ( split("\n",$data->content()) ) {
> >         if ( m{</strong><br><i>  \(  (.+?)  \)  </i></td>}igx ) {
> >         push(@filmes,$1);
>
> Você pode trocar por algo como:
>
>
> if ( $data->success() ) {
>        @filmes = $data->content() =~ m{<br><i>\((.+?)\)</i></td>}gs;
> }
>
> me parece mais rápido (menos operações) e legível, além dar a deixa
> para vc lidar com o caso de erro no get() que vc faz na linha acima.
>
> Como alternativa à regexp, você pode passear pela árvore HTML usando
> HTML::TableContentParser ou com outros módulos de scraping como o
> pQuery ou o Web::Scraper:
>
> []s
>
> -b
>
>
> 2008/10/14 Daniel de Oliveira Mantovani <
> daniel.oliveira.mantovani em gmail.com>:
> > print "Bom dia\n" if day == manha;
> > print "Boa tarde\n" if day == tarde;
> > print "Boa noite\n" if day == noite;
> >
> > Bom pessoal como vocês disseram que não é bom usar Expressões Regulares
> para
> > extrair conteúdo HTML, e pelo que vi no manual do WWW::Mechanize, porém
> eu
> > não consigo extrair com a mesma eficácia.
> >
> > Essa parte do código:
> >
> >     foreach ( split("\n",$data->content()) ) {
> >         if ( m{</strong><br><i>  \(  (.+?)  \)  </i></td>}igx ) {
> >         push(@filmes,$1);
> >
> > Quero usar o WWW::Mechanize para extrair essa parte.
> > Olhei os exemplos do WWW::Mechanize:
> >
> http://search.cpan.org/~petdance/WWW-Mechanize-1.34/lib/WWW/Mechanize/Examples.pod<http://search.cpan.org/%7Epetdance/WWW-Mechanize-1.34/lib/WWW/Mechanize/Examples.pod>
> > e vi que o autor usou Expressões Regulares para extrair:
> > @bits = $r =~ m{<TD.*?>(.*?)</TD>}gs;
> >
> > O meu projeto abaixo:
> >
> >
> > #!/usr/bin/perl
> >
> > use strict;
> > use warnings;
> > use WWW::Mechanize;
> > use WWW::Search::Mininova;
> >
> > {package Hgtorrent;
> >
> > sub Nomes
> >  {
> >  my $self = shift;
> >  my @filmes = ();
> >  my $data = WWW::Mechanize->new();
> >  $data->get('http://www.hgcinema.com.br/programacao/index.php'<http://www.hgcinema.com.br/programacao/index.php%27>
> );
> >     foreach ( split("\n",$data->content()) ) {
> >         if ( m{</strong><br><i>  \(  (.+?)  \)  </i></td>}igx ) {
> >         push(@filmes,$1);
> >         }
> >     }
> >  return @filmes;
> >  }
> >
> > sub Procurar
> >  {
> >  my $self = shift;
> >  my $busca = shift;
> >  my $mini = WWW::Search::Mininova->new( category => 'Movies',sort =>
> 'Seeds'
> > ,);
> >  $mini->search("$busca");
> >  my $result = $mini->result;
> >     if (defined $result->{name}) {
> >     print "Name: ", $result->{name},$/,
> >     "Seeds: ", $result->{seeds},$/,
> >     "Leechers: ", $result->{leechers},$/,
> >     "Uri: ", $result->{uri},$/,
> >     "Download uri: ", $result->{download_uri},$/,
> >     "Size: ", $result->{size},$/,
> >     "Category: ", $result->{category},$/,
> >     "Sub Category: ", $result->{subcategory},$/,
> >     "Added data: " ,$result->{added_date},$/;
> >      }
> >     else {
> >     print "Not Found\n";
> >     }
> >  }
> >
> >
> > }
> >
> > -D-----> Abraço
> > --
> > print
> >
> "\x54\x68\x65\x20\x53\x69\x6c\x65\x6e\x74\x20\x47\x75\x61\x72\x64\x69\x61\x6e",$/
> >
> > _______________________________________________
> > SaoPaulo-pm mailing list
> > SaoPaulo-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
print
"\x54\x68\x65\x20\x53\x69\x6c\x65\x6e\x74\x20\x47\x75\x61\x72\x64\x69\x61\x6e",$/
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20081015/5cbbcc85/attachment-0001.html>


More information about the SaoPaulo-pm mailing list