[SP-pm] Retirar conteúdo de Tabela

breno breno at rio.pm.org
Sun Jan 18 17:18:41 PST 2009


Daniel,

É difícil depurar um parser de html sem saber sob qual arquivo ele
está falhando... Mas tenho alguns rápidos ponteiros pra vc:

Segundo a documentação do HTML::Element[1] (que o TreeBuilder usa), a
sintaxe correta do look_down seria ('_tag', 'a'). Mas esse não é o seu
problema.

O que acho que pode realmente ajudar na resolução do seu problema (e
seu desenvolvimento, em qq linguagem) é lembrar de sempre colocar seus
testes de ER dentro de condicionais ou laços. Pro seu caso, use um if
e apenas manipule o $1 se o match retornar verdadeiro. Finalmente,
procure sempre testar o valor de retorno de seus métodos e rotinas,
ainda mais quando o fluxo correto do seu programa depende disso. Por
exemplo, você poderia obter mais detalhes sobre o que está acontecendo
ao seu programa sabendo que o método attr() do HTML::Element retorna
falso (mais especificamente, undef) se o atributo não está presente.
Experimente e veja se consegue depurar melhor o código e resolver seu
problema (ou voltar para cá com mais informações que nos ajudem a te
ajudar :-)

[]s

-b

[1] - http://search.cpan.org/perldoc?HTML::Element


2009/1/18 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani em gmail.com>:
> s/várioas/várias/;
>
> 2009/1/18 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani em gmail.com>
>>
>> Olá pessoal, o André me ensinou uma maneira muito divertida de retirar
>> conteúdo com HTML::TreeBuilder.
>>
>> Ele ensinou a pegar os atributos com attr(), por exemplo pegar o <a
>> href="http://pegar_isso_aqui.com"> usaria $a->attr('href').
>>
>> Desse jeito funciona perfeitamente:
>> <code>
>>   my @cidades = $tree_page->look_down(_tag => 'li');
>>   foreach my $cidade (@cidades) {
>>      my $html = $cidade->as_HTML;
>>      my $tree_cidade = HTML::TreeBuilder->new_from_content($html);
>>      $tree_cidade->look_down(_tag => 'a');
>>      $tree_cidade->as_HTML =~ m{href="(.+?)"};
>>      push(@estados,"$1/bairros") if $1 !~ m{cidade};
>> </code>
>>
>> Porém do jeito que seria o correto não funciona:
>>
>> <code>
>>   my @cidades = $tree_page->look_down(_tag => 'li');
>>   foreach my $cidade (@cidades) {
>>      my $html = $cidade->as_HTML;
>>      my $tree_cidade = HTML::TreeBuilder->new_from_content($html);
>>      $tree_cidade->look_down(_tag => 'a');
>>      my $url = $tree_cidade->attr('href');
>> 39 push(@estados,"$url/bairros") if $url !~ m{cidade};
>> </code>
>>
>> Da o seguinte erro:
>> <erro>
>> Use of uninitialized value $url in concatenation (.) or string at
>> vcvai-0.01.pl line 39.
>> </erro>
>>
>> Se eu tento dar um print "$url\n"; da o mesmo erro na linha do print.
>>
>> Tentei de várioas maneiras e nada!
>>
>> []'s
>>
>>
>>
>> 2008/11/28 Nelson Ferraz <nferraz em gmail.com>
>>>
>>> Muito boa explicacão, André.
>>>
>>> Que tal colocá-la no wiki, pra facilitar a nossa vida mais tarde?
>>> (Para nós e para outras pessoas :))
>>>
>>> Sugiro colocá-lo na forma de uma Receita:
>>>
>>> ---
>>>
>>>    Título: Como fazer parsing de HTML
>>>
>>>    Problema: você precisa extrair informacões de um arquivo HTML
>>>
>>>    Solucão: use HTML::TreeBuilder
>>>
>>>    Discussão: (explicacão acima)
>>>
>>> ---
>>>
>>> Você pode usar este link para publicar uma nova receita:
>>>
>>> - http://www.perl.org.br/bin/viewauth/Artigos/WebReceitaForm
>>>
>>> []s
>>>
>>> Nelson
>>>
>>> --
>>> Nelson Ferraz
>>>
>>> Free Software Foundation Associate Member #3203
>>> Projeto Software Livre Brasil (www.softwarelivre.org.br)
>>> Sociedade Perl do Brasil (www.perl.org.br)
>>> Rede Livre de Compartilhamento de Cultura Digital
>>> _______________________________________________
>>> SaoPaulo-pm mailing list
>>> SaoPaulo-pm em pm.org
>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>>
>>
>> --
>> http://mantovanihouse.blogspot.com/
>>
>> -------(\_------------_/)-----------
>> -------)--(----------)--(-----------
>> ------(----(---------)----)----------
>> -------)----(-------)----(-----------
>> -------(----(-------)----)-----------
>> --------\_-(\\.---.//)-_/------------
>> ----------\)' -8--8- '(/--------------
>> -----------/------------\---------------
>> ----------(--)--------(--)--------------
>> ------------(_c__c_)----------------
>> ----------------------------------------
>
>
>
> --
> http://mantovanihouse.blogspot.com/
>
> -------(\_------------_/)-----------
> -------)--(----------)--(-----------
> ------(----(---------)----)----------
> -------)----(-------)----(-----------
> -------(----(-------)----)-----------
> --------\_-(\\.---.//)-_/------------
> ----------\)' -8--8- '(/--------------
> -----------/------------\---------------
> ----------(--)--------(--)--------------
> ------------(_c__c_)----------------
> ----------------------------------------
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>


More information about the SaoPaulo-pm mailing list