Xpath 不会识别 id



我无法通过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: $basen";
    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选择节点?

提前谢谢。

去掉XPath末尾的/

.//*[@id="price_amount"]

应该这样做。事实上,它不是有效的XPath。

XPath中有一个尾部斜杠,需要删除

my $price_day = $tree->find('.//*[@id="price_amount"]');

然而,根据我自己的测试,我相信HTML::TreeBuilder::XPath在解析特定URL时也遇到了问题。也许是因为有条件的评论?

作为一种替代方法,我建议使用Mojo::UserAgentMojo::DOM

下面使用css选择器div#price_amount可以轻松地找到所需的元素并将其打印出来。

use strict;
use warnings;
use Mojo::UserAgent;
my $url = 'https://www.airbnb.com/rooms/1976460';
my $dom = Mojo::UserAgent->new->get($url)->res->dom;
my $price_day = $dom->at(q{div#price_amount})->all_text;
print $price_day, "n";

输出:

$285

请注意,Mojocast第5集有一段8分钟的介绍视频,介绍这组模块。

相关内容

  • 没有找到相关文章

最新更新