HTTP 500 typically indicates an internal server error定義。當被阻止時,你很可能會看到403或404(或者302重定向到「你被阻止」的頁面)。你可能正在訪問導致某些東西破壞服務器端的鏈接。您應該存儲哪個請求導致錯誤,並嘗試自己訪問它。可能是這個網站被打破了。
Ok..i得到它,但你可以告訴在哪裏以及如何定義errback可函數,這樣我可以處理這個錯誤,我的蜘蛛不完成
I took a look at SitemapSpider不幸的是,它不允許你要指定一個errback函數,所以你將不得不自己添加對它的支持。我基於這個the source for SitemapSpider。
首先,你會希望更改sitemap_rules
作品通過添加一個函數來處理錯誤:
sitemap_rules = [
('/product/', 'parse_product'),
('/category/', 'parse_category'),
]
將變爲:
sitemap_rules = [
('/product/', 'parse_product', 'error_handler'),
('/category/', 'parse_category', 'error_handler'),
]
接下來,在init
,要將新的回調存儲在_cbs
中。
for r, c in self.sitemap_rules:
if isinstance(c, basestring):
c = getattr(self, c)
self._cbs.append((regex(r), c))
將變爲:
for r, c, e in self.sitemap_rules:
if isinstance(c, basestring):
c = getattr(self, c)
if isinstance(e, basestring):
e = getattr(self, e)
self._cbs.append((regex(r), c, e))
最後,在_parse_sitemap
結束時,你可以指定你的新errback可功能
elif s.type == 'urlset':
for loc in iterloc(s):
for r, c in self._cbs:
if r.search(loc):
yield Request(loc, callback=c)
break
將變爲:
elif s.type == 'urlset':
for loc in iterloc(s):
for r, c, e in self._cbs:
if r.search(loc):
yield Request(loc, callback=c, errback=e)
break
從那裏,sim一定要實現你的errback功能(記住,它需要一個扭曲的失敗作爲參數),你應該很好去。
如果服務器阻止了您的搜尋器,那麼您應該尊重它。 – Mark
好吧,我知道了,但你能告訴我在哪裏以及如何定義errback函數,這樣我就可以處理這個錯誤,並且我的蜘蛛沒有完成 – Parag