2016-12-10 4 views
0

私はLWP :: UserAgentを使用していくつかのページをスクラップしています。帯域幅を節約するために、私はページ上に画像や他のメディアをダウンロードしたくないので、私はそのテキストだけに興味があります。スクラップ中にイメージをダウンロードしないでください

私にこれを助けることができる資料が見つかりません。助けてください

+0

私はLWP :: UserAgent'に 'すべての時間を使用して、画像、テキストのみをダウンロードすることはありません。また、AJAXのコンテンツもダウンロードしません。 – shawnhcorey

答えて

4

<a href=のリンクだけではなく、<img src=や類似のリンク(つまり、ビデオ、CSS、ファビコン..)がないことをあなたが徹底的に追いかけることを前提としていますが、あなたが興味のないデータがあります。

残念なことに、<a href=リンクでは、これがどのようなデータになるかを見つけることは不可能です。リソースの一般的な接尾辞(つまり、image.png)に基づいて推測することもできますが、実際の内容を確認することはできません。この情報は、たとえばレスポンスヘッダーで宣言されているContent-typeをチェックするなどして、リソースにアクセスした後にのみ取得されます。 LWPは、response_headerフェーズのハンドラを追加することによって、フルリソースをダウンロードする前に応答ヘッダーを検査する方法を提供します。 the documentationから:

response_header => sub {my($ response、$ ua、$ h)= @_; ...}
このハンドラは、レスポンスヘッダーを受信した直後で、コンテンツデータの前に呼び出されます。ハンドラがデータのハンドラを設定し、がクラークしてリクエストを中止する可能性があります。

これは、任意の非テキストコンテンツのための応答の受信を停止するために使用することができます。

my $ua = LWP::UserAgent->new; 
$ua->add_handler(response_header => sub { 
    my $resp = shift; 
    die "no text" if $resp->content_type !~m{^text/}; 
}); 
my $resp = $ua->get('http://example.com/some-image.gif'); 
関連する問題