如何在pQuery中获取元素属性

时间:2013-03-02 06:53:25

标签: jquery html perl dom

我正在尝试使用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的全面指南?

2 个答案:

答案 0 :(得分: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";
    }
);

此代码效果很好。

答案 1 :(得分: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中提供的文档重新阅读您的代码,通常有大量有关模块工作原理的信息。