我正在尝试使用WWW-Mechanize编写Perl脚本。 这是我的代码:
use DBI;
use JSON;
use WWW::Mechanize;
sub fetch_companies_list
{
my $url = shift;
my $browser = WWW::Mechanize->new( stack_depth => 0 );
my ($content, $json, $parsed_text, $company_name, $company_url);
eval
{
print "Getting the companies list...\n";
$browser->get( $url );
# die "Can't get the companies list.\n" unless( $browser->status );
$content = $browser->content();
# die "Can't get companies names.\n" unless( $browser->status );
$json = new JSON;
$parsed_text = $json->allow_nonref->utf8->relaxed->escape_slash->loose->allow_singlequote->allow_barekey->decode( $content );
foreach(@$parsed_text)
{
$company_name = $_->{name};
fetch_company_info( $company_name, $browser );
}
}
}
fetch_companies_list( "http://api.crunchbase.com/v/1/companies.js" );
问题如下:
我必须等待一段时间(约5分钟)然后它会再次开始工作。
我正在使用Linux并拥有WWW-Mechanize版本1.66。
知道可能是什么问题吗?我没有在计算机或路由器上安装任何防火墙。 此外,取消注释“die ...”行没有帮助,因为它在get()调用内停止。我可以尝试升级到最新的,即1.71,但我想知道是否有其他人使用这个Perl模块。
答案 0 :(得分:2)
5分钟(300秒)是默认超时。究竟什么超时将在响应的状态行中返回。
my $response = $mech->res;
if (!$response->is_success()) {
die($response->status_line());
}
答案 1 :(得分:0)
这是目标网站问题。它显示
503服务不可用没有服务器可以处理此问题 请求。
现在。
答案 2 :(得分:0)
等待重试,试试这个
## set maximum no of tries
my $retries = 10;
## number of secs to sleep
my $sleep = 1;
do {
eval {
print "Getting the companies list...\n";
$browser->get($url);
# die "Can't get the companies list.\n" unless( $browser->status );
$content = $browser->content();
# die "Can't get companies names.\n" unless( $browser->status );
$json = new JSON;
$parsed_text = $json->allow_nonref->utf8->relaxed->escape_slash->loose->allow_singlequote->allow_barekey->decode($content);
foreach (@$parsed_text) {
$company_name = $_->{name};
fetch_company_info( $company_name, $browser );
}
};
if ($@) {
warn $@;
## rest for some time
sleep($sleep);
## increase the value of $sleep exponetially
$sleep *= 2;
}
} while ( $@ && $retries-- );