[SP-pm] dúvida HTML::TreeBuilder

jimmy jimmy.tty at gmail.com
Thu Aug 20 05:27:09 PDT 2009


On Wed, Aug 19, 2009 at 11:31:04PM -0300, Daniel de Oliveira Mantovani wrote:
> 2009/8/19 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani em gmail.com>:
> > <code>
> > #!/usr/bin/perl
> >
> > use strict;
> > use warnings;
> > use WWW::Mechanize;
> > use HTML::TreeBuilder;
> >
> > my $mech = WWW::Mechanize->new();
> > $mech->get('trecho_do_seu_codigo');
> >
> > my $tree_page = HTML::TreeBuilder->new_from_content($mech->content);
> >
> > my $look_td = $tree_page->look_down(_tag => 'td',class => 'info');
> >
> > if (defined $look_td) {
> >
> >        print $look_td->as_HTML;
> >
> > } else {
> >
> >        die "Não existe a tag \"td\" com a \"class info\"\n";
> >
> >
> > }
> >
> > =head info1
> >
> > Se existir, vai imprimir tudo, tudo dentro da tag td, ou seja:
> > <td align="center" class="info" colspan="2"><br />Codigo
> > N<sup>o</sup>100200333 <br /> </td>
> >
> > =cut
> >
> > # - Agora que temos a tag do objetivo, vamos chegar até onde queremos.
> > # - Se se eu for fazer exatamente como você quer, é só fazer algo como:
> >
> > my $codigo_n;
> >
> > if ($look_td =~ m{<br />(Codigo N)<sup>o</sup>}) {
> >
> > # - Yeap pegou :P
> >        $codigo_n = $1;
> >
> > }
> 
> Desculpa pelo posting seguido, esqueci de um detalhe, $look_td não vai
> funcionar, pois é o objeto, precisa colocar o método:
> $look_td->as_HTML;

agradeço a reposta, já me deixou claro que às vezes não será possível
escapar de expressões regulares ao fazer o parser do html.

eu só escrevia parses baseados em regex eu gostaria de usá-las o mínimo
possível uma vez que o módulo se propõe a deixar a análise mais simples.

eu estou tentando desenvolver um parser com o HTML::TreeBuilder desde o
último ES, ainda não consegui desenvolver nada que fosse mais simples
que usar somente regex nesse caso, a quantidade de laços e desvios que
estou usando é muito grande. não posso postar o site aqui, mas outros
problemas que tiver vou postar aqui na lista.

grato a todos.

> 
> if ($look_td->as_HTML =~ m{<br />(Codigo N)<sup>o</sup>}) {
> 
> >
> > __END__

 LocalWords:  SP-pm Mantovani mech codigo Yeap


More information about the SaoPaulo-pm mailing list