我正在尝试获取此网站上列出的学区的值(value):http://gis.nyc.gov/dcp/at/f1.jsp?submit=true&house_nbr=310&street_name=Lenox+Avenue&boro=1
我使用 Firebug 来获取该值的 XPath:
/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr[3]/td/table/tbody/tr[2]/td[2]/table/tbody/tr[2]/td/table/tbody/tr[10]/td[2]
并想用 Perl 阅读它。我写了以下代码:
#!/usr/bin/perl -w
use HTML::TreeBuilder::XPath;
use Data::Dumper;
my $tree= HTML::TreeBuilder::XPath->new;
$tree->parse_file("test.html");
my @nb=$tree->findvalue( '/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr[3]/td/table/tbody/tr[2]/td[2]/table/tbody/tr[2]/td/table/tbody/tr[10]/td[2]');
print Dumper(@nb);
但它只返回
$VAR1 = '';
.有什么建议么。为了让它运行,我只是将网页中的源代码复制到 test.html 中。
谢谢!
最佳答案
某些 HTML 元素(HTML、HEAD、BODY 和 TBODY)的开始标签是可选的。看一眼
...<table><tr><td>Foo</td></tr></table>...
根据 HTML,该片段代表了四个元素:
TABLE
TBODY
TR
TD
Firefox 创建所有四个元素,因此它为 TD 元素提供以下 xpath:
.../table/tbody/tr/td
HTML::TreeBuilder 可能不会在元素的开始标签被省略时创建元素,因此它只会为该片段创建三个元素:
TABLE
TR
TD
您需要使用以下 xpath 来定位 TD 元素:
.../table/tr/td
我敢打赌,如果您删除
tbody
,您会找到结果。来自您的 xpath 的测试,因为 TBODY 元素很可能在文件中找不到。
关于html - 试图在 xpath 读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732116/