我有一个用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
答案 0 :(得分:7)
概要
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;
}