scrapy.signals信号spider_error追踪spider的回调函数的异常

在自己的爬虫类中添加以下方法,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类点进源码。其中有很多方法把错误信息细分开来了,方便我们后面使用。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值