当前位置:   article > 正文

爬虫工作量由小到大的思维转变---<Scrapy异常的存放小探讨>

爬虫工作量由小到大的思维转变---<Scrapy异常的存放小探讨>

前言:

异常很正常,调试异常/日志异常/错误异常~

但在爬虫的时候,写完代码--->运行后根本挡不住一些运行异常;于是,把异常写到了中间件~ 当然,这也没有错;

不过,其实可以直接这么设计一下...

正文:

参照一下中间件处理的异常

  1. def process_exception(self, request, exception, spider):
  2. pass

我们除了在请求异常的时候给他记录一下之外;

还有个地方,例如

  • html解析异常/报错; spiders的解析
  • 数据处理异常,pipelines的数据解析class
  • 数据存储异常;存到数据库等文件的class
  • 等;

对于这些,明明请求到数据,但是意外引起的异常-----属于会`漏数据的行为`,必须要给他记录起来的;

因此,在scrapy中最好是自己给他补一个处理异常的方法,让他存在关键位置;

例如(一个小模版):

  1. import logging
  2. def log_exception(self, item, spider, exception):
  3. logger = logging.getLogger('exception_logger')
  4. logger.setLevel(logging.ERROR)
  5. formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
  6. file_handler = logging.FileHandler('数据存储异常.txt')
  7. file_handler.setLevel(logging.ERROR)
  8. file_handler.setFormatter(formatter)
  9. logger.addHandler(file_handler)
  10. msg = f"Exception occurred for item type: {type(item)}, Spider: {spider.name}, Exception: {exception}"
  11. logger.error(msg)
  12. #在所有处理数据的地方,给他套上
  13. def process_infoitem(self, item):
  14. try:
  15. # 处理逻辑
  16. # ...
  17. pass
  18. except Exception as e:
  19. self.log_exception(item, spider, e)

然后,让他输出到文件呀,redis啥的.随你放! 

---等spiders_closed后, 你可以专门列一个爬虫,来把这些差了的数据给他补上!

(这是个小插曲,做个提醒)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43114
推荐阅读
相关标签
  

闽ICP备14008679号