[SP-pm] Retirar conteúdo de Tabela

Gabriel Vieira gabriel.vieira at gmail.com
Tue Jan 20 18:21:08 PST 2009


Tive problemas desse tipo também, haja validação que tive que acrescentar :)

2009/1/20 Blabos de Blebe <blabos em gmail.com>:
> 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
>>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
Gabriel Vieira


More information about the SaoPaulo-pm mailing list