1

我正在尝试使用pQuery抓取网站并获取所有 img 标签中的 src 属性。

这是我到目前为止所尝试的:

@imgs = pQuery("http://search.cpan.org/~ingy/pQuery-0.07/lib/pQuery.pm")
            ->find("img")
            ->each(sub{
                my $i = shift;
                print $i + 1, ") ", pQuery($_).attr('src'), "\n";
            });

输出表明有 12 个 img 元素并且没有打印任何内容.attr('src') 是否有关于如何使用 pQuery 的全面指南?

4

2 回答 2

2

我不知道 pQuery,但我建议改用Web::Query。Web::Query 是 pQuery 的替代模块。

use Web::Query;

wq("http://search.cpan.org/~ingy/pQuery-0.07/lib/pQuery.pm")->find("img")->each(
    sub {
        my $i = shift;
        print $i + 1, ") ", $_->attr('src'), "\n";
    }
);

这段代码运行良好。

于 2013-03-02T09:17:23.863 回答
2

根据每个CPAN的例子~pQuery.pm#each($sub)

如果将元素作为针对域的第一个参数传递,我可以看到 pQuery() 已经包含一个 dom 元素查找机制。删除 find($sub),并使用“img”取消移动 pQuery 参数。

my $dom = 'http://search.cpan.org/~ingy/pQuery-0.07/lib/pQuery.pm';
@imgs = pQuery("img", $dom)
        ->each(sub{
            my $i = shift;
            print $i + 1, ') ', pQuery($_).attr('src'), "\n";
        });

你有什么理由用无关的 find() 构造这个例程而不是使用集成的调用方法?

花点时间对照 CPAN 中提供的文档重新阅读您的代码,通常有大量关于模块如何工作的信息。

于 2013-03-02T09:23:13.857 回答