2016-04-17 36 views
6

相關代碼Scrapy抑制處理的錯誤

def start_requests(self): 
    requests = [ Request(url['url'], meta=url['meta'], callback=self.parse, errback=self.handle_error) for url in self.start_urls if valid_url(url['url'])] 
    return requests 

def handle_error(self, err): 
    # Errors being saved in DB 
    # So I don't want them displayed in the logs 

我有我自己的代碼在數據庫保存錯誤代碼。我不希望它們顯示在日誌輸出中。我怎樣才能抑制這些錯誤?

請注意,我不想壓制所有錯誤 - 只是在這裏處理的錯誤。

+0

你的意思是改變日誌級別嗎? –

+0

不,我只是想不顯示我在'handle_error'方法中收到的錯誤 – HyderA

+0

可能是因爲在調用錯誤處理程序之前就會記錄這些錯誤。 – AKS

回答

-1

使用一個簡單的嘗試 - 除了你的功能。只要你自己處理異常(向db添加行,只是「通過」,...),twisted就不會識別錯誤。 例如

def handle_error(self, err): 
    try: 
     #do something that raises an exception 
     #twisted won't log this as long as you handle it yourself 
     myvar = 14/0 
    except: 
     pass 
1

嘗試在你的handle_error方法使用self.skipped.addself.failed.addisinstance條件。

Here is an example

通過@Daniil Mashkin
def on_error(self, failure): 
    if isinstance(failure.value, HttpError): 
     response = failure.value.response 
     if response.status in self.bypass_status_codes: 
      self.skipped.add(response.url[-3:]) 
      return self.parse(response) 

    # it assumes there is a response attached to failure 
    self.failed.add(failure.value.response.url[-3:]) 
    return failure 
1

答案似乎是最全面的解決方案。

對於簡單情況,您可以在Settings.py中添加http錯誤代碼Spider.handle_httpstatus_listHTTPERROR_ALLOWED_CODES

這會給你的回調函數發送一些錯誤的答案,從而跳過日誌記錄以及