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

网站建设什么行业/中央新闻今日要闻

网站建设什么行业,中央新闻今日要闻,菜鸟网络属于哪个公司,溧阳网站制作爬虫工作量由小到大的思维转变---<第二十六章 Scrapy通一通中间件的问题>-CSDN博客 前言: (书接上面链接)自定义中间件玩不明白? 好吧,写个翻译的文档点笔记,让中间件更通俗一点!!! 正文: 全局图: 爬虫中间件--->翻译笔记: from scrapy import s…

爬虫工作量由小到大的思维转变---<第二十六章 Scrapy通一通中间件的问题>-CSDN博客

前言:

(书接上面链接)自定义中间件玩不明白? 好吧,写个翻译的文档+点笔记,让中间件更通俗一点!!!

正文:

全局图:

爬虫中间件--->翻译+笔记:

from scrapy import signals# useful for handling different item types with a single interface
from itemadapter import is_item, ItemAdapterclass XXXSpiderMiddleware:# Not all methods need to be defined. If a method is not defined,# scrapy acts as if the spider middleware does not modify the# passed objects.#--翻译-># 并非所有方法都需要被定义。如果某个方法没有被定义,# Scrapy 将会假设蜘蛛中间件不会修改传递的对象。@classmethoddef from_crawler(cls, crawler):# This method is used by Scrapy to create your spiders.#这个方法被用于创建你的Scrapy蜘蛛。s = cls()crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)return sdef process_spider_input(self, response, spider):# Called for each response that goes through the spider# middleware and into the spider.# Should return None or raise an exception.# --翻译--># 这个方法由Scrapy用于创建你的蜘蛛。# 对于每个通过蜘蛛中间件到达蜘蛛的响应,会被调用。# 应该返回None或引发异常。# --->笔记:可以用它# 预处理响应数据,例如解析、提取信息、清洗数据等;# 对响应进行过滤或过程控制;# 处理错误或异常情况;# 添加自定义的功能或逻辑。# 如果你不希望对响应进行任何修改或处理,你可以简单地返回None。return Nonedef process_spider_output(self, response, result, spider):# Called with the results returned from the Spider, after# it has processed the response.# Must return an iterable of Request, or item objects.#---翻译-->该方法在蜘蛛处理响应并返回结果后被调用。# 必须返回一个可迭代的Request对象或item对象。'''笔记:这个方法允许你从蜘蛛处理的结果中进一步操作和处理数据。你可以修改结果,添加、删除或筛选特定的数据,或者在结果中创建新的Request对象来进行进一步的爬取。你可以通过yield语句将处理后的结果返回。总之,process_spider_output方法提供了一个在蜘蛛处理响应结果后对结果进行额外处理的机会,用于进一步定制和控制爬取过程。'''for i in result:yield idef process_spider_exception(self, response, exception, spider):# Called when a spider or process_spider_input() method# (from other spider middleware) raises an exception.# Should return either None or an iterable of Request or item objects.'''翻译:当蜘蛛或 process_spider_input() 方法(来自其他爬虫中间件)引发异常时调用。应该返回 None 或者一个可迭代的 Request 或 item 对象。笔记:1.用于处理当蜘蛛或其他爬虫中间件的 process_spider_input() 方法引发异常时的情况2.你可以针对异常情况进行任何处理。可以根据具体需求进行错误处理、记录日志、重新发送请求等操作。-->通俗地说,这个方法允许你在蜘蛛或其他爬虫中间件的输入方法引发异常时进行自定义处理。你可以根据具体的异常情况进行相应的处理操作,如重新发送请求、记录日志等。'''passdef process_start_requests(self, start_requests, spider):# Called with the start requests of the spider, and works# similarly to the process_spider_output() method, except# that it doesn’t have a response associated.# Must return only requests (not items).'''翻译: 在蜘蛛开始请求时被调用,与 process_spider_output() 方法相似,不同之处在于它没有与之关联的响应。笔记:这个方法允许你在蜘蛛开始请求之前对初始请求进行自定义处理。你可以修改请求对象的属性,添加额外的请求,或者根据需求生成新的请求对象--->在爬虫开始请求之前提供了一个自定义处理初始请求的机会,用于修改请求参数或生成新的请求对象。'''for r in start_requests:yield rdef spider_opened(self, spider):'''翻译:在爬虫开始运行时被调用;笔记:你可以用它1.初始化一些资源或状态;2.打开数据库连接或文件;3.设置爬虫的日志输出。..等--->可以在这里进行一些准备工作,以确保爬虫在运行时具备必要的环境和配置'''spider.logger.info("Spider opened: %s" % spider.name)

下载中间件--->翻译+笔记:

class JihaiEndDownloaderMiddleware:# Not all methods need to be defined. If a method is not defined,# scrapy acts as if the downloader middleware does not modify the# passed objects.# -->翻译:# 并非所有方法都需要被定义。如果某个方法没有被定义,# # Scrapy 将会假设下载中间件不会修改传递的对象。@classmethoddef from_crawler(cls, crawler):# This method is used by Scrapy to create your spiders.# 该方法由Scrapy用于创建你的爬虫。s = cls()crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)return sdef process_request(self, request, spider):# Called for each request that goes through the downloader# middleware.# Must either:# - return None: continue processing this request# - or return a Response object# - or return a Request object# - or raise IgnoreRequest: process_exception() methods of#   installed downloader middleware will be called'''# 对每个通过下载中间件的请求进行处理。# 必须返回以下之一:# - 返回 None:继续处理该请求# - 或返回一个 Response 对象# - 或返回一个 Request 对象# - 或引发 IgnoreRequest:将调用已安装的下载中间件的 process_exception() 方法'''return Nonedef process_response(self, request, response, spider):# Called with the response returned from the downloader.# Must either;# - return a Response object# - return a Request object# - or raise IgnoreRequest# print(f'中间件接收:{response.text}')'''# 对从下载器返回的响应进行处理。# 必须返回以下之一:# - 返回一个 Response 对象# - 或返回一个 Request 对象# - 或引发 IgnoreRequest# print(f'中间件接收:{response.text}')'''return responsedef process_exception(self, request, exception, spider):# Called when a download handler or a process_request()# (from other downloader middleware) raises an exception.# Must either:# - return None: continue processing this exception# - return a Response object: stops process_exception() chain# - return a Request object: stops process_exception() chain'''# 当下载处理程序或 process_request() 方法(来自其他下载中间件)引发异常时调用。# 必须返回以下之一:# - 返回 None:继续处理该异常# - 返回一个 Response 对象:停止 process_exception() 链# - 返回一个 Request 对象:停止 process_exception() 链'''passdef spider_opened(self, spider):spider.logger.info("Spider opened: %s" % spider.name)

from_crawler(cls, crawler) 方法:

  • 该方法被 Scrapy 用于创建下载中间件实例。
  • 通常用于进行初始化操作和设置信号(Signal)。
  • 推荐用于在下载中间件创建时进行一些必要的准备工作或设置。

process_request(self, request, spider) 方法:

  • 对每个经过下载中间件的请求进行处理。
  • 必须返回以下之一:
  • 返回 None:继续处理该请求

-1.继续处理该请求,将会继续传递给后续的下载中间件处理,直到请求被发送到下载器。
-2.后续的下载中间件将有机会进一步处理请求或对请求进行修改。

  • 或返回一个 Response 对象

-1.将会终止后续的下载中间件的处理,并将该响应传递回爬虫进行处理(即交给响应处理函数)。
-2.后续的下载中间件的 process_request 和 process_response 方法不会再被调用。

  • 或返回一个 Request 对象

-1.将会终止后续的下载中间件的处理,并将该请求重新发送到引擎进行处理。
-2.该请求会经过中间件的处理流程,包括其他的下载中间件。
-3.可以用于对请求进行修改或生成新的请求来重新发起爬取。

  • 或引发 IgnoreRequest,将调用已安装的下载中间件的 process_exception() 方法。

-1.将会停止处理该请求,并调用已安装的其他下载中间件的 process_exception 方法。
-2.这是一个特殊情况,用于处理特定的异常情况或错误。
-3.通常用于处理某个请求无法继续处理的情况,可以选择忽略该请求,或者在 process_exception 方法中进行处理。

  • 用于自定义处理请求的行为,例如添加通用的请求信息、修改请求参数等。

--->补充:   (如果请求有问题)你想让一个request彻底从队列中消失,减少他接下来的生命周期;最直接的办法是引发异常; 如果返回了None他还是会传给spider的;关键取决于你怎么处理你的异常(要不要记录,在哪里记录); 最直接的还是给他引发异常~这样他就直接用日志记录了,不用再脱了裤子放屁跑spider里面去报异常!


process_response(self, request, response, spider) 方法:

  • 对从下载器返回的响应进行处理。
  • 必须返回以下之一:
  • 返回一个 Response 对象

-1.继续处理该响应,将其传递给后续的下载中间件进行处理。
-2.后续的下载中间件将有机会对响应进行进一步处理或对其进行修改。
-3.当没有其他中间件对响应进行进一步处理时,将会将响应传递给爬虫进行处理(即交给响应处理函数)。

  • 或返回一个 Request 对象

-1.将会将该请求重新发送到引擎进行处理,并再次经过下载中间件的处理流程。
-2.可以用于对响应进行处理后生成新的请求,或根据响应内容进行重定向等操作。

补充:重试用它;最好再+一个队列优先级,让这个重试的跑队列前面去,快点消掉关于他附带的(例如item)数据;然后还要注意别让这个请求被重复的url给筛掉了;

案例说明:(`+优先级`和`不去重属性`)

from scrapy import Requestclass RetryMiddleware:def process_response(self, request, response, spider):# 如果返回的响应状态码不是200,则进行重试if response.status != 200:# 修改原始的请求,并设置新的优先级和去重属性retry_request = request.copy()retry_request.priority += 1retry_request.dont_filter = True  # 设置不进行去重return retry_requestreturn response
  • 或引发 IgnoreRequest。
from scrapy.exceptions import IgnoreRequestdef process_response(self, request, response, spider):if response.status >= 400:raise IgnoreRequest  # 引发 IgnoreRequest 异常return response

引发 scrapy.exceptions.IgnoreRequest 异常,那么在引发异常后,Scrapy 将会终止当前请求的处理,并跳过后续的中间件和处理流程。--->通俗点:在 Scrapy 中,引发 scrapy.exceptions.IgnoreRequest 异常后,请求将不会传递给后续的中间件和爬虫进行处理。相当于告诉 Scrapy 忽略该请求,并继续处理下一个请求。     (----12月27日补)

  • 用于自定义处理响应的行为,例如解析、提取数据等。


process_exception(self, request, exception, spider) 方法:

  • 当下载处理程序或其他下载中间件的 process_request() 方法引发异常时调用。
  • 必须返回以下之一:
  • 返回 None:继续处理该异常

-1.如果希望继续处理异常并将其传递给其他下载中间件来处理,可以在 process_exception 方法中返回 None,让异常继续传递给后续的处理程序。

补:能给出来异常,这时候最好给他加个记录;然后返回None完事了!

案例:

class CustomDownloaderMiddleware:def process_exception(self, request, exception, spider):# 其他处理代码...# 获取异常的URLurl = request.url# 使用日志记录器记录异常的URLspider.logger.error(f"这个鬼url有问题,咱不要了;给他记一笔: {url}")return None

  • 返回一个 Response 对象:停止 process_exception() 链
  • 返回一个 Request 对象:停止 process_exception() 链

补:这俩在这方法里,我一般是不搁这处理的;你要自定义玩法,随你...就是用来重试和返回个别的给spider或者队列的

  • 用于自定义处理异常情况,例如处理超时、处理错误状态码等。

spider_opened(self, spider) 方法:

补:--->每次请求开一个spider?怕是有病吧.鸡肋的设计;直接去爬虫中间件里面整这玩意,这里直接给他过掉~

相关文章:

爬虫工作量由小到大的思维转变---<第二十八章 Scrapy中间件说明书>

爬虫工作量由小到大的思维转变---<第二十六章 Scrapy通一通中间件的问题>-CSDN博客 前言: (书接上面链接)自定义中间件玩不明白? 好吧,写个翻译的文档点笔记,让中间件更通俗一点!!! 正文: 全局图: 爬虫中间件--->翻译笔记: from scrapy import s…...

从Maven初级到高级

一.Maven简介 Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具。 一个 Maven 工程有约定的目录结构,约定的目录结构对于 Maven 实现自动化构建而言是必不可少的一环,就拿自动编译来说,Maven 必须 能…...

orangepi--开发板配置网络SSH登录

常用指令: ifconfig-------------------------------------查看网络地址 sudo passwd orangepi-------------------------改密码 nmcli dev wifi-------------------------------查看wifi nmcli dev wifi connect xx password xx--------连接网络 ip addr show wla…...

简单通讯录管理系统第4关:简单通讯录管理系统之修改通讯录用户信息

任务描述 本关任务:实现修改通讯录用户电话号码的功能。 编程要求 仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中实现通讯录管理系统中修改用户信息的功能,具体要求如下: 在 PhoneManage.java 类定义一个 changeP…...

macOS编译ckb-next

macOS x86 成功,下一步,测试:m1、m2、m3 。 1、Homebrew # 三选一 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" # /bin/bash -c "$(curl -fsSL https://raw.gith…...

漏刻有时数据可视化Echarts组件开发(46)散点图颜色判断

series组件 series: [{name: Top 5,type: scatter,coordinateSystem: bmap,data: convertData(data.sort(function (a, b) {return b.value - a.value;}).slice(0, 6)),symbolSize: 20,encode: {value: 2},showEffectOn: render,rippleEffect: {brushType: stroke},label: {fo…...

智能优化算法应用:基于驾驶训练算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于驾驶训练算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于驾驶训练算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.驾驶训练算法4.实验参数设定5.算法结果6.…...

【论文阅读】MCANet: Medical Image Segmentation with Multi-Scale Cross-Axis Attention

文章目录 摘要创新点总结实现效果总结 摘要 链接:https://arxiv.org/abs/2312.08866 医学图像分割是医学图像处理和计算机视觉领域的关键挑战之一。由于病变区域或器官的大小和形状各异,有效地捕捉多尺度信息和建立像素间的长距离依赖性至关重要。本文提…...

机器视觉实战应用:手势、人脸、动作以及手势鼠标构建(一)

CV实战应用手势、人脸、动作以及手势鼠标构建(一)总起 核心思想 手势识别是一种常见的计算机视觉应用,它可以通过摄像头或者预先录制的视频图像来追踪和识别人类手势。手势识别的应用非常广泛,例如在游戏、虚拟现实、人机交互等…...

python作业题百度网盘,python作业答案怎么查

大家好,小编来为大家解答以下问题,python作业题百度网盘,python作业答案怎么查,今天让我们一起来看看吧! 1 以下代码的输出结果为: alist [1, 2, 3, 4] print(alist.reverse()) print(alist) A.[4, 3, 2, …...

centos7.9中离线安装nginx开启ssl,arm架构

一、首先需要去国内相关镜像库下载相关依赖rpm: http://mirrors.bfsu.edu.cn/centos-altarch/7.9.2009/os/aarch64/ http://mirror.nju.edu.cn/centos-altarch/7.9.2009/os/aarch64/ http://mirrors.tuna.tsinghua.edu.cn/centos-altarch/7.9.2009/os/aarch64/ htt…...

LENOVO联想笔记本小新Pro 14 IRH8 2023款(83AL)电脑原装出厂Win11系统恢复预装OEM系统

链接:https://pan.baidu.com/s/1M1iSFahokiIHF3CppNpL4w?pwdzr8y 提取码:zr8y 联想原厂系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等自带的预装软件程序 所需要工具:16G或以上的U盘 文件格式:ISO 文件…...

blender使用faceit绑定自己的表情动作

blender使用faceit绑定自己的表情控制模型 faceit是个神器,来记录一下如何让表情动起来保持相对位置头部分离,方便后续绑定faceitfaceit的注册rig生成地标Animate可以修正表情烘培之前记得保存使用Faceit的整个流程 faceit是个神器,来记录一下…...

有关List的线程安全、高效读取:不变模式下的CopyOnWriteArrayList类、数据共享通道:BlockingQueue

有关List的线程安全 队列、链表之类的数据结构也是极常用的,几乎所有的应用程序都会与之相关。在java中, ArrayList和Vector都使用数组作为其内部实现。两者最大的不同在与Vector是线程安全的。 而ArrayList不是。此外LinkedList使用链表的数据结构实现…...

OCC服务器和BCC服务器中文件同步

OCC服务器到BCC服务器文件正向同步 需求:编写shell脚本,使用rsync命令来同步目录,把全部需要同步的目录放在配置文件中,设置定时任务自动同步 服务器IP: 服务器类型IP地址OCC服务器192.168.1.188BCC服务器192.168.1…...

工具系列:TimeGPT_(2)使用外生变量时间序列预测

文章目录 TimeGPT使用外生变量时间序列预测导入相关工具包预测欧美国家次日电力价格案例 TimeGPT使用外生变量时间序列预测 外生变量在时间序列预测中非常重要,因为它们提供了可能影响预测的额外信息。这些变量可以包括假日标记、营销支出、天气数据或与你正在预测…...

应用于前端的自然断点法:wasm应用示例

某月某日,虾神本虾接到了这样一个需求,前端获取数据之后,在渲染之前,要对数据进行分类,分类的方法可以选择常用几种,例如等距法、自然断点法、标准差分类法等…… 问:为什么要在前端&#xff1…...

web前端javaScript笔记——(6)数组

对象一般分为内建对象,宿主对象,自定义对象。 数组(Array) 数组也是一个对象 它和我们普通对象功能类似,也是用来存储一些值的 不同的是普通对象是使用字符串作为属性名的,而数组时使用数字来作为索引操作元素案引: 从0开始的…...

vue的props

Vue的props是组件之间传递数据的一种方式&#xff0c;可以在组件中定义props并接收外部传递的数据。 在父组件中使用子组件时&#xff0c;可以使用v-bind指令将数据传递给子组件的props。子组件中可以通过props属性接收并使用这些数据。 父组件中&#xff1a; <template&…...

【51单片机系列】DS18B20温度传感器模块

本文是关于温度传感器的相关内容。 文章目录 一、 DS18B20数字温度传感器介绍1.1、 DS18B20温度传感器的特点1.2、DA18B20内部结构1.3、 DS18B20的温度转换规则1.4、 DS18B20的ROM指令表1.6、 计算温度1.7、 读写时序 二、DS18B20使用示例 一、 DS18B20数字温度传感器介绍 DS1…...

ubuntu20.04 conda环境配置Mask2former记录

建议先看完再按照步骤安装 代码地址&#xff1a;GitHub - facebookresearch/Mask2Former: Code release for "Masked-attention Mask Transformer for Universal Image Segmentation" 一、配置环境 1、创建虚拟环境 conda create -n mask2former python3.8conda …...

Git更新远程分支

当本地仓库无法找到新创建的远程分支时使用。 git fetch 是 Git 中的一个命令&#xff0c;用于从远程仓库获取最新的更改。 git fetch 会从指定的远程仓库中获取所有分支的最新提交&#xff0c;并将这些提交存储在本地的远程分支中。但是&#xff0c;这些更改并不会自动合并到…...

2023年软件工程师工作总结范文

各位领导&#xff1a; 你们好&#xff01;时光飞逝&#xff0c;光阴似箭&#xff0c;转眼间又到了一年的年末。2023年又是一个不平凡的年&#xff0c;今年是国家十四个五年计划的第三年&#xff0c;是全面贯彻党的二十大精神的开局之年。中国XX集团作为中国XX行业中最大的企…...

STM32实战之深入理解I²C通信协议

目录 IC的物理层 IC的协议层 IC特点 IC 总线时序图 软件模拟IC时序分享 软件模拟IIC驱动AT24C02分享 例程简介 例程分享 STM32的IC外设 IIC&#xff08;Inter-Integrated Circuit&#xff09;&#xff0c;也称为IC或TWI&#xff08;Two-Wire Interface&#xff09;&am…...

如何区分ChatGPT 3.5与ChatGPT 4:洞悉智能对话的新时代

如何区分ChatGPT 3.5与ChatGPT 4&#xff1a;洞悉智能对话的新时代 随着人工智能技术的快速发展&#xff0c;OpenAI持续推出更加强大和精准的模型&#xff0c;以改善和扩展用户体验。在聊天机器人领域&#xff0c;特别是OpenAI的ChatGPT系列&#xff0c;每一次迭代都带来了显著…...

blender scripting 编写

blender scripting 编写 一、查看ui按钮对应的代码二、查看或修改对象名称三、案例&#xff1a;渲染多张图片并导出对应的相机参数 一、查看ui按钮对应的代码 二、查看或修改对象名称 三、案例&#xff1a;渲染多张图片并导出对应的相机参数 注&#xff1a;通过ui交互都设置好…...

使用 Elasticsearch 检测抄袭 (二)

我在在之前的文章 “使用 Elasticsearch 检测抄袭 &#xff08;一&#xff09;” 介绍了如何检文章抄袭。这个在许多的实际使用中非常有意义。我在 CSDN 上的文章也经常被人引用或者抄袭。有的人甚至也不用指明出处。这对文章的作者来说是很不公平的。文章介绍的内容针对很多的…...

WPF DataGrid

文章目录 SelectionModeHeaderVisibilityBorderBrush SelectionMode DataGrid 控件的 SelectionMode 属性定义了用户可以如何选择 DataGrid 中的行。它是一个枚举类型的属性&#xff0c;有以下几个选项&#xff1a; Single&#xff08;默认值&#xff09;&#xff1a;只能选择…...

【cesium-5】鼠标交互与数据查询

scene.pick返回的是包含给定窗口位置基元的对象 scene.drillpack返回的是给定窗口位置所有对象的列表 Globe.pick返回的是给光线和地形的交点 Cesium.ScreenSpaceEventType.MIDDLE_CLICK 鼠标中间点击事件 Cesium.ScreenSpaceEventType.MOUSE_MOVE 鼠标移入事件 Cesium.ScreenS…...

Xcode 编译速度慢是什么原因?如何提高编译速度?

作为一个开发者&#xff0c;我们都希望能够高效地开发应用程序&#xff0c;而编译速度是影响开发效率的重要因素之一。然而&#xff0c;有时候我们会发现在使用 Xcode 进行开发时&#xff0c;译速度非常慢&#xff0c;这给我们带来了不少困扰。那么&#xff0c;为什么 Xcode 的…...