当前位置: 首页 > 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注入技术
  • 分享的文章《人生如棋》
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 4. 路由到控制器 - Laravel从零开始教程
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • js如何打印object对象
  • Linux后台研发超实用命令总结
  • PHP那些事儿
  • python大佬养成计划----difflib模块
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • spring boot 整合mybatis 无法输出sql的问题
  • SSH 免密登录
  • vue 配置sass、scss全局变量
  • windows下mongoDB的环境配置
  • 大快搜索数据爬虫技术实例安装教学篇
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 给新手的新浪微博 SDK 集成教程【一】
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 设计模式(12)迭代器模式(讲解+应用)
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 网络应用优化——时延与带宽
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • (poj1.2.1)1970(筛选法模拟)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (多级缓存)多级缓存
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET DataGridView数据绑定说明
  • .Net 高效开发之不可错过的实用工具
  • .Net面试题4
  • @拔赤:Web前端开发十日谈
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [04] Android逐帧动画(一)
  • [1]-基于图搜索的路径规划基础