框架下载_25. Scrapy 框架-下载中间件Middleware

e4c57fe8bfdf96b8327ecc0f8495e199.png

1. Spider 下载中间件(Middleware)

Spider 中间件(Middleware) 下载器中间件是介入到 Scrapy 的 spider 处理机制的钩子框架,您可以添加代码来处理发送给 Spiders 的 response 及 spider 产生的 item 和 request

2. 激活一个下载DOWNLOADER_MIDDLEWARES

要激活一个下载器中间件组件,将其添加到 DOWNLOADER_MIDDLEWARES设置中,该设置是一个字典,其键是中间件类路径,它们的值是中间件命令

a91e7015e8bff9c4b42e4f4dd0063469.png

DOWNLOADER_MIDDLEWARES设置与DOWNLOADER_MIDDLEWARES_BASEScrapy中定义的设置(并不意味着被覆盖)合并, 然后按顺序排序,以获得最终的已启用中间件的排序列表:第一个中间件是靠近引擎的第一个中间件,最后一个是靠近引擎的中间件到下载器。换句话说,process_request() 每个中间件的方法将以增加中间件的顺序(100,200,300,...)process_response()被调用,并且每个中间件的方法将以降序调用

要决定分配给中间件的顺序,请参阅 DOWNLOADER_MIDDLEWARES_BASE设置并根据要插入中间件的位置选择一个值。顺序很重要,因为每个中间件都执行不同的操作,而您的中间件可能依赖于之前(或后续)正在使用的中间件

如果要禁用内置中间件(DOWNLOADER_MIDDLEWARES_BASE默认情况下已定义和启用的中间件 ),则必须在项目DOWNLOADER_MIDDLEWARES设置中定义它,并将“ 无” 作为其值。例如,如果您要禁用用户代理中间件

d444dc24b4f87f38fcde54771cddb367.png

最后,请记住,某些中间件可能需要通过特定设置启用

3. 编写你自己的下载中间件

每个中间件组件都是一个Python类,它定义了一个或多个以下方法

class scrapy.downloadermiddlewares.DownloaderMiddleware

任何下载器中间件方法也可能返回一个延迟

3.1 process_request(self, request, spider)

当每个request通过下载中间件时,该方法被调用

process_request()必须返回其中之一

  • 返回 None
    • Scrapy 将继续处理该 request,执行其他的中间件的相应方法,直到合适的下载器处理函数(download handler)被调用,该 request 被执行(其 response 被下载)
  • 返回一个 Response 对象
    • Scrapy 将不会调用 任何 其他的 process_request()或 process_exception()方法,或相应地下载函数; 其将返回该 response。已安装的中间件的 process_response()方法则会在每个 response 返回时被调用
  • 返回一个 Request 对象
    • Scrapy 则停止调用 process_request 方法并重新调度返回的 request。当新返回的 request 被执行后, 相应地中间件链将会根据下载的 response 被调用
  • raise IgnoreRequest
    • 如果抛出 一个 IgnoreRequest 异常,则安装的下载中间件的 process_exception() 方法会被调用。如果没有任何一个方法处理该异常, 则 request 的 errback(Request.errback)方法会被调用。如果没有代码处理抛出的异常, 则该异常被忽略且不记录(不同于其他异常那样)

参数:

  • request (Request 对象) – 处理的request
  • spider (Spider 对象) – 该request对应的spider

3.2 process_response(self, request, response, spider)

当下载器完成http请求,传递响应给引擎的时候调用
  • process_request() 必须返回以下其中之一: 返回一个 Response 对象、 返回一个 Request 对象或raise一个 IgnoreRequest 异常
    • 如果其返回一个 Response (可以与传入的response相同,也可以是全新的对象), 该response会被在链中的其他中间件的 process_response() 方法处理。
    • 如果其返回一个 Request 对象,则中间件链停止, 返回的request会被重新调度下载。处理类似于 process_request() 返回request所做的那样。
    • 如果其抛出一个 IgnoreRequest 异常,则调用request的errback(Request.errback)。 如果没有代码处理抛出的异常,则该异常被忽略且不记录(不同于其他异常那样)。
  • 参数:
    • request (Request 对象) – response所对应的request
    • response (Response 对象) – 被处理的response
    • spider (Spider 对象) – response所对应的spider

4 使用代理

a1c7bcacf46ee28018c45ec1121770b9.png

写一个spider测试

bd99c15bedc8325faf5540cad8f33ccf.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android activity 显示无焦点_Android面试题集锦之fragemnt

大家可以关注一下小编,小编以后会一直更新Android相关技术资料文章。创建方式静态创建首先我们需要创建一个xml文件,然后创建与之对应的java文件,通过onCreatView()的返回方法进行关联,最后我们需要在Activity中进行配置相关参数即…

IntelliJ IDEA for Mac 在eclipse(MacOS)模式下的快捷键

文章目录Mac键盘符号eclipse(MacOS)模式下的快捷键General 通用Debugging 调试Search/ Replace 查询/替换Editing 编辑Refactoring 重构Navigation 导航Usage Search 使用查询VCS/ Local History 版本控制/本地历史记录Live Templates 动态代码模板Other 官方文档上没有体现Mac…

java终结器_弃用Java的终结器

java终结器JDK-8165641 (“ Deprecate Object.finalize”)已打开,以“ deprecate Object.finalize() ”,因为“ finalizer本质上存在问题,使用finalizer可能会导致性能问题,死锁&…

node 安装_VUE项目迁移之node.js的安装

【摘要】由于公司的项目需要迁移到VUE中去, 所以就用到了node.js, 这里简单整理了一下node.js的安装教程和环境变量的配置【作者】田鋆鹏Node.js 安装教程1. 在node.js的官网下载安装包下载地址1: https://nodejs.org/en/下载地址2: http://nodejs.cn/直接下载.msi的安装包即可…

jsp mysql servlet_JSP+Servlet+JDBC+mysql实现的学生成绩管理系统

本系统基于JSPServletMysql一个基于JSPServletJdbc的学生成绩管理系统。涉及技术少,易于理解,适合JavaWeb初学者学习使用。难度等级:入门技术栈编辑器Eclipse Version: 2019-12 (4.14.0)前端技术基础:htmlcssJavaScript框架&#…

IntelliJ IDEA for Mac 彻底卸载/彻底删除

删除 /Users/liaowenxiong/Library/Logs/目录下所有与 IntelliJ IDEA 相关的文件: cd /Users/liaowenxiong/Library/Logs/ rm -rf *intellij* rm -rf *IntelliJ* rm -rf *JetBrains* rm -rf *jetbrains*删除 /Users/liaowenxiong/Library/Preferences/目录下所有与…

春天猫rtsy_春天重试,因为冬天来了

春天猫rtsy好的,这实际上与冬天无关,众所周知,冬天已经到了 。 它与Spring Retry有关,Spring Retry是一个小的Spring框架库,它使我们可以向应重试的任何任务添加重试功能。 这里有一个很好的教程 ,解释了如…

mariadb mysql 配置文件_MariaDB/MySQL配置文件my.cnf解读

MariaDB/MySQL的默认设置性能非常差,仅仅起一个功能测试的作用,不能用在生产环境中,因此要对一些参数进行调整优化。当然,对配置文件各参数的调整需要根据实际环境,不同时期不同数量级的数据进行性能优化。MySQL/Maria…

python字符串合并去重_015day--python集合和字符串

一、集合关系测试交集: 两个都有 .intersettion() 或用 & 符号差集: 列表a有,列表b没有 .difference() 或用 - 符号并集: 两列表合并,去重 .union() 或用 | 符号合并: .update() 会更改数据…

IntelliJ IDEA for Mac如何存取自定义快捷键配置文件

IntelliJ IDEA for Mac自定义的快捷键配置文件在以下的目录中: /Users/liaowenxiong/library/application support/JetBrains/IntelliJIdea2020.3/keymaps

react 事件处理_在React中处理事件

react 事件处理在使用React渲染RESTful服务后,我们创建了简单的UI,用于渲染从RESTful服务获取的员工列表。 作为本文的一部分,我们将扩展同一应用程序以支持添加和删除员工操作。 我们将通过添加/删除员工操作来更新react-app后端api&#x…

linux mysql 分区_Linux :linux磁盘分区(普通分区2T以内),安装免安装版mysql(tar.gz)...

1关闭防火墙:(依次运行 停止-->禁用)Centos7使用firewalld:启动:systemctl start firewalld查看状态:systemctl status firewalld停止:systemctl disable firewalld禁用:systemctl stop firewalld2官网下…

python 3d大数据可视化软件_十大顶级大数据可视化工具推荐

要使数据分析真正有价值和有洞察力,就需要高质量的可视化工具。市场上有很多产品,特点和价格各不相同,本文列出了一些广泛认可的工具。其实企业如何选择一个合适的可视化工具,并不是一件容易的事情,需要仔细的考虑。据…

IntelliJ IDEA 配置文件位置

1 IDEA 2020.1 以上 1.1 Win 语法&#xff1a; %APPDATA%\JetBrains\<product><version>Win上的APPDATA默认位置如下&#xff1a; C:\Users\用户名\AppData\Roaming例子&#xff1a; C:\Users\用户名\AppData\Roaming\JetBrains\IntelliJIdea2020.11.2 MacOS …

mysql 中间表的好处_Mysql中使用中间表提高统计查询速度

对于数据量较大的表&#xff0c;在其上进行统计查询通常会效率很低&#xff0c;并且还要考虑统计查询是否会对在线的应用产生负面影响。通常在这种情况下&#xff0c;使用中间表可以提高统计查询的效率&#xff0c;下面通过对session 表的统计来介绍中间表的使用&#xff1a;(1…

junit 5测试异常处理_使用JUnit 5测试异常

junit 5测试异常处理JUnit 5带来了令人敬畏的改进&#xff0c;并且与以前的版本有很大不同。 JUnit 5在运行时需要Java 8&#xff0c;因此Lambda表达式可以在测试中使用&#xff0c;尤其是在断言中。 这些断言之一非常适合测试异常。 设置项目 为了演示JUnit 5的用法&#xff…

多元回归求解 机器学习_金融领域里的机器学习算法介绍:人工神经网络

人工智能的发展在很大程度上是由神经网络、深度学习和强化学习推动的。这些复杂的算法可以解决高度复杂的机器学习任务&#xff0c;如图像分类、人脸识别、语音识别和自然语言处理等。这些复杂任务一般是非线性的&#xff0c;同时包含着大量的特征输入。我们下面我们将分几天的…

百度网盘不限速被限速_基本API限速

百度网盘不限速被限速您可能正在开发某种形式的&#xff08;Web / RESTful&#xff09;API&#xff0c;并且如果它是面向公众的&#xff08;甚至是内部的&#xff09;&#xff0c;则通常需要以某种方式对其进行速率限制。 即&#xff0c;限制一段时间内执行的请求数&#xff0c…

mysql怎么查看刷脏页慢_一条SQL查询语句极为缓慢,如何去优化呢

一条 SQL 查询语句执行的很慢&#xff0c;那是每次查询都很慢呢&#xff1f;还是大多数情况下是正常的&#xff0c;偶尔出现很慢呢&#xff1f;可以分以下两种情况来讨论。大多数情况是正常的&#xff0c;只是偶尔会出现很慢的情况。在数据量不变的情况下&#xff0c;这条SQL语…

MacBook Air如何清理缓存

方法一&#xff1a;使用热键 AltCmdRP电源键这是清理缓存热键。 用法&#xff1a;先按住前4个键&#xff0c;然后按一次电源键&#xff0c;前四个键不松开&#xff0c;等到听到电脑第四次开机音效后可以松开&#xff0c;开机音效共有五次&#xff0c;然后电脑自动开机 方法二&…