【发布时间】:2014-11-07 15:04:28
【问题描述】:
我无法通过 id 获取节点。 代码直截了当,应该是不言自明的。
#!/usr/bin/perl
use Encode;
use utf8;
use LWP::UserAgent;
use URI::URL;
use Data::Dumper;
use HTML::TreeBuilder::XPath;
my $url = 'https://www.airbnb.com/rooms/1976460';
my $browser = LWP::UserAgent->new;
my $resp = $browser->get( $url, 'User-Agent' => 'Mozilla\/5.0' );
if ($resp->is_success) {
my $base = $resp->base || '';
print "-> base URL: $base\n";
my $data = $resp->decoded_content;
my $tree= HTML::TreeBuilder::XPath->new;
$tree->parse_content( $resp->decoded_content() );
binmode STDOUT, ":encoding(UTF-8)";
my $price_day = $tree->find('.//*[@id="price_amount"]/');
print Dumper($price_day);
$tree->delete();
}
上面的代码打印出来:
-> base URL: https://www.airbnb.com/rooms/1976460
$VAR1 = undef;
如何通过 ID 选择节点?
提前致谢。
【问题讨论】:
-
离题,但
perl -Mojo -E 'say g("https://www.airbnb.com/rooms/1976460")->dom->find(q{div[id="price_amount"]})->text'打印$285。 Mojo::DOM 是一个不错的模块... -
感谢您的提示!我进一步研究了 Mojo 并喜欢它使用 CSS 选择器而不是 XPath
标签: perl xpath html-tree html-treebuilder