Perl HTML::Treebuilder XPATH 表标签没有 ID/Name



我想提取HTML页面中特定表格单元格中存在的一些文本。

现在,问题是,此单元格存在于没有 ID/Name 的表标记中。

我正在使用 HTML::TreeBuilder::XPath 使用 XPATH 表达式提取值。

以下是 HTML 内容的外观:

<table border="0">
<tr>
<td>Some Text</td>
<td>The Text I want comes here</td>
</tr>

这是我的 XPATH 表达式的样子:

@nodes=$tree->findnodes(q{//table[8]/tr/td[2]/text()});
print $_->string_value."n" foreach(@nodes); # corrected, thanks mirod.

它不显示输出。

我使用了上面的表[8],因为这是HTML页面中的八个表标签(假设索引从1开始)。

另外,我使用了 td[2],因为我想要第二个 td 标签之间的 innerHTML。

谢谢。

如果在 XPath 查询结束时删除text(),会发生什么情况?我认为在TD本身上打电话给string_value就足够了。

此外,方法调用不会在字符串中插值,因此您需要编写print $_->string_value, "n"

这将为您提供内容的文本,而不是标记。为此,您需要使用 as_HTML ,并去除外部标记(HTML::Element 中没有方法可以为您提供内部 HTML):

#!/usr/bin/perl
use strict;
use warnings;
use HTML::TreeBuilder::XPath;
my $tree= HTML::TreeBuilder::XPath->new_from_content( <DATA>);
my @nodes=$tree->findnodes(q{//table[1]/tr/td[2]});
print $_->string_value, "n" foreach(@nodes); # text
print $_->as_HTML, "n" foreach(@nodes);      # outerHTML

__DATA__
<html>
<body>
<table border="0">
<tr>
<td>Some Text</td>
<td>The Text I want comes here with <b>nested</b> content</td>
</tr>
</body>
</html>

mirod 方法应该适合你。

但是如果您需要文本内容,我建议使用findvalues而不是findnodes

尝试运行此代码并显示输出:

my @values=$tree->findvalues(q{//table[8]//tr[1]//td});
print $_, "n" foreach(@values);

最新更新