2012-06-06 58 views
4

我使用WWW :: Mechanize来抓取网站,除了有时它会打到返回错误代码404或500(找不到或内部的页面服务器错误),然后我的脚本就会退出并停止运行。这实际上与我的数据收集有关,所以无论如何WWW :: Mechanize会让我发现这些错误并查看返回的错误代码类型(即404,500等)。谢谢您的帮助!使用perl处理404和内部服务器错误WWW :: Mechanize

回答

6

你需要禁用自动检查:

my $mech = WWW::Mechanize->new(autocheck => 0); 

$mech->get("http://somedomain.com"); 

if ($mech->success()) { 
    ... 
} 
else { 
    print "status is: " . $mech->status; 
} 

而且,顺便说一句,看看WWW::Mechanize::Cached::GZipWWW::Mechanize::Cached测试你的机甲脚本时,以加快发展。

+0

哇!正是我在找什么。谢谢:) – srchulo

+0

'autodie => 0'是这样做的新方法我认为 – surfer190

+0

@ surfer190你确定你不是指'autocheck => 0'(就像我的例子)?我没有在文档中看到“autodie”。 – oalders

3

关闭autocheck并手动检查status(),它会返回响应的HTTP状态码。

这就好比一个3位数字为,为未找到,等等。

use strict; 
use warnings; 
use WWW::Mechanize; 

my $url = 'http://...'; 
my $mech = WWW::Mechanize->new(autocheck => 0); 
$mech->get($url); 

print $mech->status(); 

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html状态代码定义

如果状态代码为400以上,那么你得到错误 ...