2012-06-06 59 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以上,那麼你得到錯誤 ...