Scrapy>;=0.16使用不同的方法将方法附加到信号,添加了额外的示例
最简单的解决方案是编写一个扩展,在这个扩展中,您可以使用零碎的信号捕获故障。 例如,以下扩展将捕获所有错误并打印回溯。
您可以对失败执行任何操作—如保存到数据库,或发送电子邮件—它本身就是twisted.python.failure.Failure的实例。
对于0.16之前的零碎版本:
from scrapy import signals
from scrapy.xlib.pydispatch import dispatcher
class FailLogger(object):
def __init__(self):
"""
Attach appropriate handlers to the signals
"""
dispatcher.connect(self.spider_error, signal=signals.spider_error)
def spider_error(self, failure, response, spider):
print "Error on {0}, traceback: {1}".format(response.url, failure.getTraceback())
对于0.16及以上的零碎版本:
from scrapy import signals
class FailLogger(object):
@classmethod
def from_crawler(cls, crawler):
ext = cls()
crawler.signals.connect(ext.spider_error, signal=signals.spider_error)
return ext
def spider_error(self, failure, response, spider):
# 然后就可以发送邮件之内代码
print "Error on {0}, traceback: {1}".format(response.url, failure.getTraceback())
您可以在设置中启用扩展,如下所示:
EXTENSIONS = {
'spiders.extensions.faillog.FailLogger': 599,
}