HTML Treebuilder XPath提取链接

前端之家收集整理的这篇文章主要介绍了HTML Treebuilder XPath提取链接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在编写一个基本脚本,它只是从网页中提取所有链接.它是用Perl编写的,并使用WWW :: Mechanize和HTML :: Treebuilder :: Xpath模块,这两个模块都是通过CPAN安装的.

我知道只使用WWW :: Mechanize就可以轻松完成,但是我也想学习使用XPath.

因此,脚本将解析整个网页,并检查每个锚标记的href属性,提取链接并将其打印到控制台/将其写入文件.请注意,在下面的脚本中,我没有使用use strict,因为我只是写这篇文章来澄清和理解使用XPath遍历HTML树的概念.

这是脚本:

#! /usr/bin/perl

use WWW::Mechanize;
use HTML::TreeBuilder::XPath;
use warnings;

$url="https://example.com";

$mech=WWW::Mechanize->new();
$mech->get($url);

$tree=HTML::TreeBuilder::XPath->new();

$tree->parse($mech->content);

$nodes=$tree->findnodes(q{'//a'}); # line is modified later.

foreach $node($nodes)
{
    print $node->attr('href');
}

它给出了一个错误

Can't locate object method "attr" via package "XML::XPathEngine::Literal" at pagegetter.pl line 23.

修改了脚本如下:

$nodes=$tree->findnodes(q{'//a/@href'});

while($node=$nodes->shift)
{
  print $node->attr('href');
}

错误

Can't locate object method "shift" via package "XML::XPathEngine::Literal"

我不确定,如何打印href属性的值.

$nodes应该包含所有href属性的列表?我相信它不存储价值,而是指向它?

我尝试搜索和阅读示例,但我不知道如何去做.

谢谢.

最佳答案
有几个错误.修理:

# list context
my @nodes = $tree->findnodes(
    q{//a}       # just a string,not a string containings quotes
);

# iterate over array
for my $node (@nodes) {

猜你在找的HTML相关文章