我正试图获得本网站上列出的学区价值:http://gis.nyc.gov/dcp/at/f1.jsp?submit=true&house_nbr=310&street_name=Lenox+Avenue&boro=1
我使用Firebug来获取该值的XPath: / HTML /体/表/ tbody的/ TR [2] / TD /表/ tbody的/ TR / TD [2] /表/ tbody的/ TR / TD /表/ tbody的/ TR [3] / TD /表/ TBODY / TR [2] / TD [2] /表/ tbody的/ TR [2] / TD /表/ 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。
谢谢!
答案 0 :(得分:3)
某些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
我敢打赌,如果你从xpath中删除tbody
测试,你会找到结果,因为TBODY元素很可能在文件中找不到。