3

OO Perl で書かれた Web スクレイピング アプリケーションがあります。アプリで使用される単一のWWW::Mechanizeオブジェクトがあります。同じ URL を 2 回フェッチしないようにするにはどうすればよいですかget()

my $mech = WWW::Mechanize->new();
my $url = 'http:://google.com';

$mech->get( $url ); # first time, fetch
$mech->get( $url ); # same url, do nothing
4

3 に答える 3

7

WWW::Mechanize::Cachedを参照してください。

あらすじ

use WWW::Mechanize::Cached;

my $cacher = WWW::Mechanize::Cached->new;
$cacher->get( $url );

説明

Cache::Cache階層を使用して、キャッシング Mech を実装します。これにより、無礼にサーバーを攻撃することなく、繰り返しリクエストを実行できます。

于 2010-03-25T14:30:00.430 に答える
4

URL とそのコンテンツをハッシュに格納できます。

my $mech = WWW::Mechanize->new();
my $url = 'http://google.com';
my %response;

$response{$url} = $mech->get($url) unless $response{$url};
于 2010-03-25T12:30:25.763 に答える
2

メソッドをサブクラス化WWW::Mechanizeし、再定義して、get()必要なことを行うことができます。

package MyMech;
use base 'WWW::Mechanize';

sub get {
    my $self = shift;
    my($url) = @_;

    if (defined $self->res && $self->res->request->uri ne $url) {
        return $self->SUPER::get(@_)
    }
    return $self->res;
}
于 2010-03-25T12:14:48.997 に答える