WWW::Mechanize善于提取链接,但如果你需要得到其他文本,我通常将它与HTML::TreeBuilder结合。事情是这样的:
use HTML::TreeBuilder;
my $tree = HTML::TreeBuilder->new_from_content($mech->content);
foreach my $td ($tree->look_down(_tag => 'td')) {
# If there's no <a> in this <td>, then skip it:
my $a = $td->look_down(_tag => 'a') or next;
my $tdText = $td->as_text;
my $aText = $a->as_text;
printf("td-text: %s\n a-text: %s\nhref: %s\ntitle: %s\n",
$tdText, $aText, $a->attr('href'), $a->attr('title'));
}
这段代码的唯一的问题是,你不希望所有的<td>
标签的文本。你如何解决这个问题取决于你。如果$aText
足够独特的,你可以这样做:
$tdText =~ s/\Q$aText\E.*//s;
在最坏的情况下,你必须编写自己的函数来提取所需的文本元素,在<br>
停止(或无论你确定停止点)。
来源
2010-09-10 22:36:12
cjm
除此之外,我可以推荐http://search.cpan.org/dist/HTML-TreeBuilder-LibXML/,它是HTML-TreeBuilder的扩展,也为程序员提供了XPath和LibXML的所有功能。我最近一直在使用它来测试HTML页面。 – 2010-09-11 13:12:32