1

pQueryを使用して Web サイトをスクレイピングし、すべての 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 に答える