相关代码
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
我有自己的代码用于在DB中保存错误代码。我不希望它们显示在日志输出中。如何抑制这些错误?
请注意,我并不想要压制所有错误 - 只是在这里处理错误。
答案 0 :(得分:2)
尝试在self.skipped.add
方法中使用self.failed.add
,isinstance
handle_error
条件。
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 :(得分:1)
@Daniil回答Mashkin似乎是最全面的解决方案。
对于简单的情况,您可以在Spider.handle_httpstatus_list
中添加http错误代码HTTPERROR_ALLOWED_CODES
或Settings.py
。
这将为您的回调函数发送一些错误的答案,因此也会跳过日志记录
答案 2 :(得分:-1)
在函数中使用简单的try-except。只要您自己处理异常(向数据库添加行,只是“传递”,...),twisted就无法识别错误。 e.g。
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