4

我正在使用 WWW::Mechanize 来抓取网站,它工作得很好,除了有时它会点击返回错误代码 404 或 500(未找到或内部服务器错误)的页面,然后我的脚本将退出并停止运行。这真的把我的数据收集弄乱了,所以无论如何 WWW::Mechanize 会让我捕捉这些错误并查看返回了什么样的错误代码(即 404,500 等)。谢谢您的帮助!

4

2 回答 2

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以在测试你的机械脚本时加快你的开发速度。

于 2012-06-06T21:10:18.010 回答
3

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

这是一个 3 位数字,例如200表示OK404表示Not Found,依此类推。

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 或以上,那么你得到错误...

于 2012-06-06T21:33:53.830 回答