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

André Garcia Carneiro andre.garcia.carneir at terra.com.br
Wed Oct 15 05:01:44 PDT 2008


Espero que não esteja tentando apenas chupinhar a informação para propósitos obscuros... 
Vou te dar uma sugestão, mas acreditando que você esteja querendo aprender e usar isso para fins
não-ilícitos(chupinhar conteúdo sem autorização, por exemplo).

<code>

#! /usr/bin/perl -w
use HTML::TreeBuilder;
use WWW::Mechanize;
use strict;
my $m   = WWW::Mechanize->new();
$m->get('http://www.hgcinema.com.br/programacao/index.php');
my $string = $m->content;
my $tree        = HTML::TreeBuilder->new_from_content($string);
#print $tree->as_HTML;
my @filmes      = $tree->look_down(_tag => 'tr', bgcolor=>"#ffffff",sub{$_[0]->attr('onclick') ne ''});
print "\n\nFILME                Censura         Horario";
foreach(@filmes){
        my @col = $_->look_down(_tag=>'td');
        my ($filme,$censura,$horario) = ($col[0]->as_text,$col[1]->as_text,$col[2]->as_text);
        print "\n$filme         $censura                $horario";
}

</code>


---------- 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: Tue, 14 Oct 2008 16:44:34 -0300
Assunto: [SP-pm] Extrair conteúdo HTML. WWW::Mechanize ?

> 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
> *
> 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');
>     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",$/
> 

--
André Garcia Carneiro
Developer(Perl/PHP)
Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org



More information about the SaoPaulo-pm mailing list