<br>Ótimo pessoal, funcionou perfeitamente valeu de muito a ajuda de vocês.<br>Consegui fazer o que eu queria.<br><br><div class="gmail_quote">2008/11/27 André Garcia Carneiro <span dir="ltr"><<a href="mailto:andre.garcia.carneir@terra.com.br">andre.garcia.carneir@terra.com.br</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">2008/11/27 Daniel de Oliveira Mantovani <<a href="mailto:daniel.oliveira.mantovani@gmail.com">daniel.oliveira.mantovani@gmail.com</a>><br>
<br>
> Olá Monges!<br>
<br>
> Estou tentando retirar o conteúdo de uma tabela:<br>
> <a href="http://www.magicdomain.com.br/index.php?sub=colecoes&idSerie=57" target="_blank">http://www.magicdomain.com.br/index.php?sub=colecoes&idSerie=57</a><br>
<br>
> No caso eu só quero o nome e o preço.<br>
> Tag => td<br>
> Class => titulosNome<br>
<br>
> Tag => td<br>
> Class => titulosPreco<br>
<br>
> Dentro da tag td e da classe titulosNome quero pegar só o nome. Porém não estou achando uma forma.<br>
> Olhem meu script:<br>
> <a href="http://scsys.co.uk:8001/20980" target="_blank">http://scsys.co.uk:8001/20980</a><br>
<br>
<br>
<br>
<br>
</div>Que nome? Bota um exemplo do código HTML, e diga exatamente o que você quer, por favor...</blockquote><div><a href="http://www.magicdomain.com.br/index.php?sub=colecoes&idSerie=87">http://www.magicdomain.com.br/index.php?sub=colecoes&idSerie=87</a> <br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<div class="Ih2E3d"><br>
<br>
<br>
> Eu sei que está tudo errado, eu pequei um modelo, pra ser exacto o modelo que o André passou aqui na lista.<br>
<br>
<br>
</div>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<br>
que eu tava falando...</blockquote><div>Tava certo no seu exemplo, na outra thread, foi eu que quis usar para outra coisa ;) <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<div class="Ih2E3d"><br>
<br>
<br>
> Não entendi, como funciona o módulo para fazer o parser.<br>
<br>
<br>
<br>
</div>É, você não entendeu mesmo, pois bem, vamos lá:<br>
<br>
Dado uma tabela escrita em HTML:<br>
<br>
<table id='table_001' class='t1'><br>
<tr><br>
<td id='td_tituloprod_001'>Titulo da Imagem</td><br>
<td id='td_imagem_001'><img src='<a href="http://www.algumhost.com.br/imagens/imagem_001.jpg" target="_blank">http://www.algumhost.com.br/imagens/imagem_001.jpg</a>'></td><br>
</tr><br>
</table><br>
<br>
<br>
HTML::TreeBuilder - Faz o parser(utilizando HTML::Parser e outros módulos), para devolver um objeto, que na<br>
verdade é uma lista de objetos HTML::Element organizados em forma de árvores(grosseiramente é isso). Se você<br>
estiver familiarizado com uma estrutura de árvore, saberá que cada nó de uma árvore pode ter nós e ramos, e é<br>
exatamente disso que a estrutura de um objeto HTML::TreeBuider trata.<br>
<br>
Imagine uma árvore de cabeça para baixo, onde a raíz é um objeto que representa o documento HTML inteiro, e os<br>
nós abaixo desse objeto, também são objetos que representam as tags HTML do documento.<br>
<br>
No código acima, o nó raiz é o código todo. Mas suponhamos que eu quisesse a informação que está em um dos<br>
'tds', por exemplo, o Título da imagem1( o texto), como fazer isso com HTML::TreeBuider?<br>
<br>
<code><br>
#! /usr/bin/perl -w;<br>
use strict;<br>
use HTML::TreeBuider;<br>
my $htmlcode = "<br>
<table id='table_001' class='t1'><br>
<tr><br>
<td id='td_tituloprod_001'>Titulo da Imagem1</td><br>
<td id='td_imagem_001'><img src='<a href="http://www.algumhost.com.br/imagens/imagem_001.jpg" target="_blank">http://www.algumhost.com.br/imagens/imagem_001.jpg</a>'></td><br>
</tr><br>
<tr><br>
<td id='td_tituloprod_002'>Titulo da Imagem2</td><br>
<td id='td_imagem_002'><img src='<a href="http://www.algumhost.com.br/imagens/imagem_001.jpg" target="_blank">http://www.algumhost.com.br/imagens/imagem_001.jpg</a>'></td><br>
</tr><br>
<br>
</table><br>
";<br>
<br>
#Nesse momento, eu tenho o objeto que representa o código HTML inteiro.<br>
my $tree = HTML::TreeBuider->new_from_content($htmlcode);<br>
#Capturando a informação do td<br>
my $td = $tree->look_down(_tag => 'td',id=>'td_tituloprod_001');<br>
my $texto = $td->as_text if $td;<br>
print "\n$texto";#O resultado disso, se os nomes dos atributos estiverem corretos será 'Titulo da Imagem 1'<br>
</code><br>
<br>
Repare que nesse caso, eu fui direto no nó que representa o código HTML '<td id='td_tituloprod_001'>Titulo da<br>
Imagem1</td>', através do método 'look_down'. Esse método, permite que eu olhe a partir de um nó, para os seus<br>
filhos, ou seja, se você lembrar da imagem da árvore de cabeça para baixo, eu na verdade estou dizendo ao<br>
objeto para olhar para os objetos 'abaixo'... Existe o método look_up também, mas pra facilitar, vamos nos<br>
atentar em look_down.<br>
<br>
Para o problema que estou tentando te explicar, look_down foi feito a partir do objeto '$tree', ou seja, a<br>
partir do nó raiz da árvore. Isso significa que eu poderia ter alcançado qualquer outra tag(ou nó) da árvore,<br>
já que é o nó raiz. Pois bem, uma vez que eu guardei esse objeto em $td - lembre-se:'my $td =<br>
$tree->look_down(_tag => 'td',id=>'td_tituloprod_001');', agora eu tenho em $td um objeto que representa a tag<br>
'<td id='td_tituloprod_001'>Titulo da Imagem1</td>'. Repare que, a partir de '$td', seguindo o conceito de<br>
árvore, eu não consigo chegar a nó nenhum abaixo dele, porque não existe nenhuma tag dentro da 'td', com o<br>
método look_down, pois já cheguei na 'folha' da árvore, ou seja, não há mais ninguém abaixo.<br>
<br>
É a mesma coisa se vc for pensar em diretórios, suponha que eu tenha a seguinte estrutura:<br>
<br>
perl<br>
|<br>
->rules<br>
|<br>
->the<br>
|<br>
->world<br>
<br>
foo<br>
|<br>
->subfoo<br>
<br>
<br>
Uma vez que eu tenha percorrido os diretórios até 'world'. Não há mais nada abaixo dele, portanto não tem como<br>
acessar alguma coisa abaixo dele. Se eu quisse acesar o diretório 'subfoo', a partir de world, teria que subir<br>
os diretórios para depois descer novamente e chegar em subfoo. HTML::TreeBuider funciona da mesma forma.<br>
Transferindo a analogia do sistema de diretórios para as tags HTML, teria-se o seguinte:<br>
<br>
<br>
table id='table_001' class='t1'<br>
|<br>
->tr<br>
|<br>
->td id='td_tituloprod_001'>Titulo da Imagem1<br>
<br>
No entanto, existem uma diferença importante. Diferentemente da analogia com os diretórios, não necessariamente<br>
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,<br>
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',<br>
para depois ir a td. Posso ir direto ao 'td' que quero alcançar, porque no caso estava no nó raiz do objeto.<br>
<br>
Outra coisa importante, é que você pode colocar tudo em contexto de array, por exemplo, se eu quisesse, nesse<br>
código capturar todos os tds, eu chamaria o look_down dessa maneira:<br>
<br>
<code><br>
my @tds = $tree->look_down(_tag => 'td');<br>
</code><br>
<br>
Aí eu tenho uma lista com todos os tds abaixo do nó raiz.<br>
<br>
Acho que consegui colocar o conceito para você. O resto você pode ver lendo a documentação e perguntando por<br>
aqui na lista. E poste os seus códigos por favor pra ver em que pé que está.</blockquote><div> </div><div><a href="http://scsys.co.uk:8001/21003">http://scsys.co.uk:8001/21003</a> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<br>
Cheers! <br></blockquote><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
<br>
<br>
<br>
<br>
> --<br>
<div class="Ih2E3d">> Procuro emprego C.V:<br>
> <a href="http://www.danielmantovani.site50.net/" target="_blank">http://www.danielmantovani.site50.net/</a><br>
<br>
> print "\x54\x68\x65\x20\x53\x69\x6c\x65\x6e\x74\x20\x47\x75\x61\x72\x64\x69\x61\x6e",$/<br>
<br>
<br>
_______________________________________________<br>
</div> SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
<br>
<br>
<br>
<br>
--<br>
André Garcia Carneiro<br>
Analista/Desenvolvedor Perl<br>
<br>
<br>
_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>Procuro emprego C.V:<br><a href="http://www.danielmantovani.site50.net/">http://www.danielmantovani.site50.net/</a><br><br>print "\x54\x68\x65\x20\x53\x69\x6c\x65\x6e\x74\x20\x47\x75\x61\x72\x64\x69\x61\x6e",$/<br>
<br>