如何制作WWW:机械化以不两次获取页面?

时间:2010-03-25 12:02:41

标签: perl www-mechanize

我有一个用OO Perl编写的网络抓取应用程序。应用程序中使用了单个WWW::Mechanize对象。如何使其不能两次获取相同的URL,即使用相同的URL no-op制作第二个get()

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

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

3 个答案:

答案 0 :(得分:7)

请参阅WWW::Mechanize::Cached

  

概要

use WWW::Mechanize::Cached;

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

描述

     

使用Cache::Cache层次结构实现缓存机制。这使得人们可以执行重复请求而不会无礼地敲击服务器。

答案 1 :(得分:4)

您可以将网址及其内容存储在哈希值中。

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

$response{$url} = $mech->get($url) unless $response{$url};

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