当前位置: 首页 > news >正文

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

前言:

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

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

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

正文:

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

def process_exception(self, request, exception, spider):pass

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

还有个地方,例如

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

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

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

例如(一个小模版):

import loggingdef 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:# 处理逻辑# ...passexcept Exception as e:self.log_exception(item, spider, e)

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

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

(这是个小插曲,做个提醒)

相关文章:

  • 反射型xss的常用语法
  • 二叉树 经典例题
  • 重装系统以后无法git跟踪
  • 爬虫工作量由小到大的思维转变---<第二十八章 Scrapy中间件说明书>
  • Delphi6函数大全4-SysUtils.pas
  • linux查看系统版本、内核版本、CPU核数/线程/型号、内存大小等
  • lambda表达式和包装器
  • 分布式IO在工业自动化中的应用
  • 【教学类-43-11】 20231231 3*3宫格数独提取单元格坐标数字的通用模板(做成2*2=4套、3*2=6套)
  • 【Leetcode】1154. 一年中的第几天
  • Go语言程序设计-第6章--方法
  • 解决SpringBoot中出现的跨域请求问题
  • RainBond 构建组件 rbd-chaos 故障解决 【真实案例】
  • 单例模式的双重检查锁定是什么?
  • 如何使用ModuleShifting测试Module Stomping和Module Overloading注入技术
  • php的引用
  • SegmentFault for Android 3.0 发布
  • #Java异常处理
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • Angular数据绑定机制
  • bearychat的java client
  • HTTP中GET与POST的区别 99%的错误认识
  • java小心机(3)| 浅析finalize()
  • React16时代,该用什么姿势写 React ?
  • tensorflow学习笔记3——MNIST应用篇
  • ViewService——一种保证客户端与服务端同步的方法
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 悄悄地说一个bug
  • 如何在 Tornado 中实现 Middleware
  • 事件委托的小应用
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • $L^p$ 调和函数恒为零
  • (算法)Travel Information Center
  • (转)创业的注意事项
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 反编译_.net反编译的相关问题
  • @Pointcut 使用
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [.net]官方水晶报表的使用以演示下载
  • [.NET]桃源网络硬盘 v7.4
  • []Telit UC864E 拨号上网
  • [2016.7 day.5] T2
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [Android]Android开发入门之HelloWorld
  • [BUAA软工]第一次博客作业---阅读《构建之法》
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]