2015-12-20 62 views
0

是的,我讀過,我可以檢查repsonse.status獲取錯誤代碼,但問題是,控制不會得到我的處理程序,例如, HTTP錯誤400:scrapy向日志報告,但沒有機會以我的方式處理請求。在下面的例子中,下一個請求是從'parse'完成的,並且錯誤被回覆到由'flight_search_start'處理的第二個請求。scrapy沒有得到錯誤的請求處理程序

def parse(self, response):   
     return scrapy.Request(
     ... 
      callback=self.flight_search_start, 

      )   

    def flight_search_start(self, response): 
     session = ... 
     if (self.checkError(response, session)): 
      return 

    def checkError(self, response, session): 
     if response.status == 200 or 
response.status == 201 or  response.status == 202: 
      return False 
NEVER GET HERE!!! 
     print "Request failed!!! ",errorData(session) 
     return True 

還有第二個問題:當我關掉我的路由器框架掛起很長一段時間,沒有報告任何錯誤。

回答

0

Scrapy帶有一個處理錯誤響應狀態的機制,您只需要將errback參數傳遞給Request對象。

關於你關掉你的路由器,不是因爲你失去了網絡連接嗎?

0

默認情況下,scrapy ingores編碼超出200-300範圍。如果您想要處理它們,您必須通過使用HTTPERROR_ALLOWED_CODES(例如,使用HTTPERROR_ALLOWED_CODES)來讓scrapy通過蜘蛛或通過settings.py讓它們通過。

HTTPERROR_ALLOWED_CODES = [404,403,406, 408, 500, 503, 504] 

請參閱文檔here

相關問題