[SP-pm] Retirar conteúdo de Tabela

Blabos de Blebe blabos at gmail.com
Tue Jan 20 17:52:14 PST 2009


Desculpem ser chato, mas quando eu usei o HTML::TreeBuilder, precisei
mudar para algo como:

<code>
my $tag = $tree_cidade->look_down(_tag => 'a');
my $url = $tag ? $tag->attr('href') : '';
</code>

Porque se o look_down não encontrar  a tag <a> ele vai retornar undef.
Daí tentar encadear uma chamada a attr() sobre o undef vai dar caca.

Quando eu precisei fazer isso, haviam vários pontos problemáticos
assim, os quais eram verbosos para tratar. Eu sempre queria fazer as
chamadas encadeadas como o márcio fez, mas acabava tendo que separar
uma a uma para o caso do look_down não encontrar nada.

Existem soluções menos verbosas e mais elegantes?

Abraços

Wesley



2009/1/19 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani em gmail.com>:
> Isso mesmo Márcio!
>
> 2009/1/19 Márcio Vitor <cromo.jml em gmail.com>
>>
>> Daniel, vou bicar feio mas acho que você tá querendo algo assim:
>>
>> my $url = $tree_cidade->look_down(_tag => 'a')->attr('href');
>>
>> Márcio Vitor
>>
>> 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_)----------------
>>> ----------------------------------------
>>>
>>> _______________________________________________
>>> SaoPaulo-pm mailing list
>>> SaoPaulo-pm em pm.org
>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>>
>> _______________________________________________
>> 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_)----------------
> ----------------------------------------
>
> _______________________________________________
> 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