爬虫工作量由小到大的思维转变---<Scrapy异常的存放小探讨>
2023-12-26 17:51:26
前言:
异常很正常,调试异常/日志异常/错误异常~ 但在爬虫的时候,写完代码运行后挡不住一些运行异常;于是,很多都把异常写到了中间件~ 当然,这也没有错; 不过,其实可以直接这么设计一下...
正文:
参照一下中间件的异常
def process_exception(self, request, exception, spider):
pass
我们除了在请求异常的时候给他记录一下之外;
还有个地方,例如 html解析异常/报错; 数据处理异常,数据存储异常;等;
对于这些,明明请求到了数据,但是意外引起的异常,是属于会漏数据的行为,必须要给他记录起来的;
因此,在spider最好是自己给他补一个处理异常的方法,在pipelines也是一样;让他存起来关键地址;
例如(一个小模版):
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啥的.随你放!?
为后期,你可以专门列一个爬虫,来吧这些差的数据给他补上!
(这是个小插曲,补的...所以不做文章填入)
文章来源:https://blog.csdn.net/m0_56758840/article/details/135226474
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!