gpt4 book ai didi

perl - 使用 HTML::TreeBuilder::XPath 访问 href 值

转载 作者:行者123 更新时间:2023-12-03 15:45:43 25 4
gpt4 key购买 nike

我正在使用 LWP::UserAgent , HTML::Selector::XPathHTML::TreeBuilder::XPath模块获取一组搜索结果中第一个 YouTube 视频的 href 属性的值。

到目前为止我的代码是:

use LWP::UserAgent;
use HTML::TreeBuilder::XPath;
use HTML::Selector::XPath;

my $ua = LWP::UserAgent->new;

#my $response =..
my $html = "http://www.youtube.com/results?search_query=run+flo+rida";

my $tree = HTML::TreeBuilder::XPath->new;

my $xpath = HTML::Selector::XPath::selector_to_xpath("(//*[@id = 'search-results']/li)[1]/div[2]/h3/a/@href/");
my @nodes = $tree->findnodes($xpath);
print" $nodes[0]";

我不确定我的打印是否有误,或者其他语法是否有误。截至目前它打印

HTML::TreeBuilder::XPath=HASH(0x1a78250)

当我要打印的时候

/watch?v=JP68g3SYObU

感谢您的帮助!

最佳答案

这里有很多问题。

  • 必须始终在每个 Perl 程序的顶部使用严格使用警告。它会捕获许多您很容易忽略的错误,并且只有在您寻求代码帮助时才会礼貌。在这种情况下,它会警告您您的 XPath 字符串包含数组变量名称 @id@href,您可能不打算将其插入到字符串中。

  • 您正在使用 HTML::Selector::XPath,它将 CSS 选择器转换为 XPath 表达式。但是您向它提供了一个 XPath 表达式,因此它不会工作并且不需要该模块。

  • 根本不需要使用 LWP,因为 HTML::TreeBuilder 有一个 new_from_url 构造函数,它将获取为您准备的 HTML 页面。

这个程序似乎可以满足您的需求。我还添加了 URI 模块以从 href 属性值中的相对 URL 派生绝对 URL。

use strict;
use warnings;

use HTML::TreeBuilder::XPath;
use URI;

my $url = "http://www.youtube.com/results?search_query=run+flo+rida";

my $tree = HTML::TreeBuilder::XPath->new_from_url($url);

my $anchor = $tree->findnodes('//ol[@id="search-results"]//h3[@class="yt-lockup2-title"]/a/@href');
my $href = URI->new_abs($anchor->[0]->getValue, $url);
print $href;

输出

http://www.youtube.com/watch?v=JP68g3SYObU

关于perl - 使用 HTML::TreeBuilder::XPath 访问 href 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14432005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com