赞
踩
异常很正常,调试异常/日志异常/错误异常~
但在爬虫的时候,写完代码--->运行后根本挡不住一些运行异常;于是,把异常写到了中间件~ 当然,这也没有错;
不过,其实可以直接这么设计一下...
参照一下中间件处理的异常
- def process_exception(self, request, exception, spider):
- pass
我们除了在请求异常的时候给他记录一下之外;
还有个地方,例如
对于这些,明明请求到数据,但是意外引起的异常-----属于会`漏数据的行为`,必须要给他记录起来的;
因此,在scrapy中最好是自己给他补一个处理异常的方法,让他存在关键位置;
例如(一个小模版):
- import logging
-
- def log_exception(self, item, spider, exception):
- logger = logging.getLogger('exception_logger')
- logger.setLevel(logging.ERROR)
- formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
-
- file_handler = logging.FileHandler('数据存储异常.txt')
- file_handler.setLevel(logging.ERROR)
- file_handler.setFormatter(formatter)
- logger.addHandler(file_handler)
-
- msg = f"Exception occurred for item type: {type(item)}, Spider: {spider.name}, Exception: {exception}"
- logger.error(msg)
-
- #在所有处理数据的地方,给他套上
-
- def process_infoitem(self, item):
- try:
- # 处理逻辑
- # ...
- pass
- except Exception as e:
- self.log_exception(item, spider, e)
然后,让他输出到文件呀,redis啥的.随你放!
---等spiders_closed后, 你可以专门列一个爬虫,来把这些差了的数据给他补上!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。