[SP-pm] Retirar conteúdo de Tabela

Daniel de Oliveira Mantovani daniel.oliveira.mantovani at gmail.com
Thu Nov 27 18:28:43 PST 2008


Ótimo pessoal, funcionou perfeitamente valeu de muito a ajuda de vocês.
Consegui fazer o que eu queria.

2008/11/27 André Garcia Carneiro <andre.garcia.carneir em terra.com.br>

> 2008/11/27 Daniel de Oliveira Mantovani <
> daniel.oliveira.mantovani em gmail.com>
>
> >    Olá Monges!
>
> >    Estou tentando retirar o conteúdo de uma tabela:
> >    http://www.magicdomain.com.br/index.php?sub=colecoes&idSerie=57
>
> >    No caso eu só quero o nome e o preço.
> >    Tag => td
> >    Class => titulosNome
>
> >    Tag => td
> >    Class => titulosPreco
>
> >    Dentro da tag td e da classe titulosNome quero pegar só o nome. Porém
> não estou achando uma forma.
> >    Olhem meu script:
> >    http://scsys.co.uk:8001/20980
>
>
>
>
> Que nome? Bota um exemplo do código HTML, e diga exatamente o que você
> quer, por favor...

http://www.magicdomain.com.br/index.php?sub=colecoes&idSerie=87

>
>
>
>
> >    Eu sei que está tudo errado, eu pequei um modelo, pra ser exacto o
> modelo que o André passou aqui na lista.
>
>
> Não me culpe se você ainda não aprendeu a usar o módulo. Eu uso isso todo o
> santo dia. Com certeza eu sabia do
> que eu tava falando...

Tava certo no seu exemplo, na outra thread, foi eu que quis usar para outra
coisa ;)

>
>
>
>
> >    Não entendi, como funciona o módulo para fazer o parser.
>
>
>
> É, você não entendeu mesmo, pois bem, vamos lá:
>
> Dado uma tabela escrita em HTML:
>
> <table id='table_001' class='t1'>
>      <tr>
>                   <td id='td_tituloprod_001'>Titulo da Imagem</td>
>                   <td id='td_imagem_001'><img src='
> http://www.algumhost.com.br/imagens/imagem_001.jpg'></td>
>      </tr>
> </table>
>
>
> HTML::TreeBuilder - Faz o parser(utilizando HTML::Parser e outros módulos),
> para devolver um objeto, que na
> verdade é uma lista de objetos HTML::Element organizados em forma de
> árvores(grosseiramente é isso). Se você
> estiver familiarizado com uma estrutura de árvore, saberá que cada nó de
> uma árvore pode ter nós e ramos, e é
> exatamente disso que a estrutura de um objeto HTML::TreeBuider trata.
>
> Imagine uma árvore de cabeça para baixo, onde a raíz é um objeto que
> representa o documento HTML inteiro, e os
> nós abaixo desse objeto, também são objetos que representam as tags HTML do
> documento.
>
> No código acima, o nó raiz é o código todo. Mas suponhamos que eu quisesse
> a informação que está em um dos
> 'tds', por exemplo, o Título da imagem1( o texto), como fazer isso com
> HTML::TreeBuider?
>
> <code>
> #! /usr/bin/perl -w;
> use strict;
> use HTML::TreeBuider;
> my $htmlcode = "
> <table id='table_001' class='t1'>
>      <tr>
>                   <td id='td_tituloprod_001'>Titulo da Imagem1</td>
>                   <td id='td_imagem_001'><img src='
> http://www.algumhost.com.br/imagens/imagem_001.jpg'></td>
>      </tr>
>      <tr>
>                   <td id='td_tituloprod_002'>Titulo da Imagem2</td>
>                   <td id='td_imagem_002'><img src='
> http://www.algumhost.com.br/imagens/imagem_001.jpg'></td>
>      </tr>
>
> </table>
> ";
>
> #Nesse momento, eu tenho o objeto que representa o código HTML inteiro.
> my $tree = HTML::TreeBuider->new_from_content($htmlcode);
> #Capturando a informação do td
> my $td              = $tree->look_down(_tag =>
> 'td',id=>'td_tituloprod_001');
> my $texto        = $td->as_text if $td;
> print "\n$texto";#O resultado disso, se os nomes dos atributos estiverem
> corretos será 'Titulo da Imagem 1'
> </code>
>
> Repare que nesse caso, eu fui direto no nó que representa o código HTML
> '<td id='td_tituloprod_001'>Titulo da
> Imagem1</td>', através do método 'look_down'. Esse método, permite que eu
> olhe a partir de um nó, para os seus
> filhos, ou seja, se você lembrar da imagem da árvore de cabeça para baixo,
> eu na verdade estou dizendo ao
> objeto para olhar para os objetos 'abaixo'... Existe o método look_up
> também, mas pra facilitar, vamos nos
> atentar em look_down.
>
> Para o problema que estou tentando te explicar, look_down foi feito a
> partir do objeto '$tree', ou seja, a
> partir do nó raiz da árvore. Isso significa que eu poderia ter alcançado
> qualquer outra tag(ou nó) da árvore,
> já que é o nó raiz. Pois bem, uma vez que eu guardei esse objeto em $td -
> lembre-se:'my $td              =
> $tree->look_down(_tag => 'td',id=>'td_tituloprod_001');', agora eu tenho em
> $td um objeto que representa a tag
> '<td id='td_tituloprod_001'>Titulo da Imagem1</td>'. Repare que, a partir
> de '$td', seguindo o conceito de
> árvore, eu não consigo chegar a nó nenhum abaixo dele, porque não existe
> nenhuma tag dentro da 'td', com o
> método look_down, pois já cheguei na 'folha' da árvore, ou seja, não há
> mais ninguém abaixo.
>
> É a mesma coisa se vc for pensar em diretórios, suponha que eu tenha a
> seguinte estrutura:
>
> perl
>   |
>   ->rules
>               |
>               ->the
>                   |
>                   ->world
>
> foo
> |
> ->subfoo
>
>
> Uma vez que eu tenha percorrido os diretórios até 'world'. Não há mais nada
> abaixo dele, portanto não tem como
> acessar alguma coisa abaixo dele. Se eu quisse acesar o diretório 'subfoo',
> a partir de world, teria que subir
> os diretórios para depois descer novamente e chegar em subfoo.
> HTML::TreeBuider funciona da mesma forma.
> Transferindo a analogia do sistema de diretórios para as tags HTML,
> teria-se o seguinte:
>
>
> table id='table_001' class='t1'
> |
> ->tr
>    |
>    ->td id='td_tituloprod_001'>Titulo da Imagem1
>
> No entanto, existem uma diferença importante. Diferentemente da analogia
> com os diretórios, não necessariamente
> eu tenho que percorrer todos os nós um a um para chegar no meu objetivo,
> desde que o nó que se quer alcançar,
> esteja abaixo do nó onde se está no momento, ou seja, para alcançar o meu
> td, eu não tive que passar por 'tr',
> para depois ir a td. Posso ir direto ao 'td' que quero alcançar, porque no
> caso estava no nó raiz do objeto.
>
> Outra coisa importante, é que você pode colocar tudo em contexto de array,
> por exemplo, se eu quisesse, nesse
> código capturar todos os tds, eu chamaria o look_down dessa maneira:
>
> <code>
> my @tds = $tree->look_down(_tag => 'td');
> </code>
>
> Aí eu tenho uma lista com todos os tds abaixo do nó raiz.
>
> Acho que consegui colocar o conceito para você. O resto você pode ver lendo
> a documentação e perguntando por
> aqui na lista. E poste os seus códigos por favor pra ver em que pé que
> está.


http://scsys.co.uk:8001/21003

>
>
> Cheers!
>

>
>
>
>
>
> >    --
> >    Procuro emprego C.V:
> >    http://www.danielmantovani.site50.net/
>
> >    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
>
>
>
>
> --
> André Garcia Carneiro
> Analista/Desenvolvedor Perl
>
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
Procuro emprego C.V:
http://www.danielmantovani.site50.net/

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/20081128/cf2508c6/attachment-0001.html>


More information about the SaoPaulo-pm mailing list