使用Html::TreeBuilder::XPath打印表格内容

3
我希望从一个HTML文件中提取所有的表格,并按照以下方式打印它们的内容:每个单元格由\t分隔,每一行由\n分隔,每个表格由\n\n分隔。以下是我的脚本,当我把它改成在tr上查找值时,整个tr被插入为一个元素,我甚至尝试了其他方法,比如findnodes_as_strings ($path)。我想修改它以符合上述结构。
use strict;
use warnings;
use HTML::TreeBuilder::XPath;

my $tree= HTML::TreeBuilder::XPath->new;
$tree->parse_file( "html.html");

my @values=$tree->findvalues(q{//table//tr//td});

print $_, "\n" foreach(@values);

你不使用 HTML::TableExtract,有什么原因吗? - Sinan Ünür
1个回答

4

您需要分别处理每个表格,行同理:

foreach my $table ( $tree->findnodes('//table') ) {

    foreach my $row ( $table->findnodes('.//tr') ) {

        my @cells = $row->findvalues('.//td');
        print join("\t", @cells), "\n";
    }
    print "\n";
}

当然,这只是针对简单表格的解决方案(考虑列合并、th、嵌套表格等)。


1
非常感谢,这正是我所期望的。 - Nishanth Lawrence Reginold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接