在自己的爬虫类中添加以下方法,signals.spider_error()它能追踪到所有scrapy的Request对象的回调函数的错误。
自定义spider_error方法用于处理捕获到异常,可以存入日志,按照自己的需求写就行,这里我们存入redis中。
from scrapy import signals
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
spider = super(BaiduSpider, cls).from_crawler(crawler, *args, **kwargs)
crawler.signals.connect(spider.spider_error, signal=signals.spider_error)
return spider
def spider_error(self, failure, response, spider):
url = response.url
sign = re.search(r'(\?sign|&sign=)(\d+)', url).group(2)
redis_pool = redis.ConnectionPool(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB)
redis_conn = redis.Redis(connection_pool=redis_pool)
print(failure.getErrorMessage(), '------------------------------------')
print(failure.getTracebackObject(), '------------------------------------')
print(failure.getTraceback(), '------------------------------------')
redis_conn.setex(sign, 60*60*24, failure.getErrorMessage())
print("Error on {0}, traceback: {1}".format(url, failure.getTraceback()))
failure 是twsited.python.failure.Failure()的一个实例化对象。
from twisted.python.failure import Failure
可以在pycharm中通过导入Failure类点进源码。其中有很多方法把错误信息细分开来了,方便我们后面使用。。。