Без вашего реального HTML трудно помочь, но $html->find
возвращает список <a>
элементов, так что вы можете написать что-то вроде
foreach my $anchor ($html->find('a')) {
print $anchor->as_text, "\n";
}
Но это найдет все <a>
элементов, и вряд ли это то, что вы хотите.$ html-> look_down () гораздо более гибок и обеспечивает поиск по атрибуту, а также по имени тега.
Я не могу начать догадываться о вашей проблеме с комментариями, не видя, с какими данными вы имеете дело.
Если вам нужно обрабатывать каждый текстовый элемент независимо, то вам, вероятно, нужно вызвать метод objectify_text
.Это превращает каждый текстовый элемент в дереве в псевдоэлемент с именем тега ~text
и атрибутом text
, например <p>paragraph text</p>
будет преобразован в <p><~text text="paragraph text" /></p>
.Эти элементы могут быть обнаружены с использованием $html->find('~text')
как обычно.Вот код для демонстрации
use strict;
use warnings;
use HTML::TreeBuilder;
my $html = HTML::TreeBuilder->new_from_content(<<END_HTML);
<span class=time>1 h </span>
<a href="http://foo.com/User">User</a>: There are not enough <b>big</b>
<b>fish</b> in the lake ;
END_HTML
$html->objectify_text;
print $_->attr('text'), "\n" for $html->find('~text');
ВЫХОД
1 h
User
: There are not enough
big
fish
in the lake ;