【Scrapy】Scrapy 中间件等级设置规则


准我快乐地重饰演某段美丽故事主人
饰演你旧年共寻梦的恋人
再去做没流着情泪的伊人
假装再有从前演过的戏份
重饰演某段美丽故事主人
饰演你旧年共寻梦的恋人
你纵是未明白仍夜深一人
穿起你那无言毛衣当跟你接近
                     🎵 陈慧娴《傻女》


Scrapy 是一个功能强大的爬虫框架,通过使用中间件(middleware),用户可以自定义和扩展爬虫的行为。中间件提供了对请求和响应进行预处理和后处理的机制,使用户可以在不修改核心代码的情况下增强爬虫的功能。

在 Scrapy 中,中间件的执行顺序由它们的“等级”(priority)决定。了解和正确设置中间件的等级对于构建高效和可维护的爬虫至关重要。

什么是中间件?

中间件是 Scrapy 中的一种钩子,允许用户在处理请求和响应时执行自定义代码。中间件分为两类:

  • Downloader Middleware:处理下载器相关的请求和响应。
  • Spider Middleware:处理爬虫(spider)相关的输入和输出。

中间件的等级

中间件的等级决定了它们的执行顺序。Scrapy 使用一个整数值来表示中间件的等级,值越小,中间件越先执行。

  • 下载器中间件(Downloader Middleware)
    下载器中间件位于 Scrapy 的下载器和引擎之间。以下是一个示例配置:
DOWNLOADER_MIDDLEWARES = {'myproject.middlewares.CustomDownloaderMiddleware': 543,'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,
}

在上述配置中:

CustomDownloaderMiddleware 的等级为 543
UserAgentMiddleware 的等级为 400
RetryMiddleware 的等级为 500

执行顺序如下:

UserAgentMiddleware(400)
RetryMiddleware(500)
CustomDownloaderMiddleware(543)

请求从引擎发出,先经过等级较低的中间件,最后到达下载器。响应从下载器返回时,先经过等级较高的中间件,最后到达引擎。

爬虫中间件(Spider Middleware)

爬虫中间件位于引擎和爬虫之间。以下是一个示例配置:

SPIDER_MIDDLEWARES = {'myproject.middlewares.CustomSpiderMiddleware': 543,'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
}

在上述配置中:

CustomSpiderMiddleware 的等级为 543
HttpErrorMiddleware 的等级为 50
OffsiteMiddleware 的等级为 500

执行顺序如下:

HttpErrorMiddleware(50)
OffsiteMiddleware(500)
CustomSpiderMiddleware(543)

请求从引擎发出,先经过等级较低的中间件,最后到达爬虫。响应从爬虫返回时,先经过等级较高的中间件,最后到达引擎。

如何设置中间件的等级

为了设置中间件的等级,需要在 Scrapy 的配置文件 settings.py 中定义相应的字典,指定中间件的路径和等级。例如:

DOWNLOADER_MIDDLEWARES = {'myproject.middlewares.CustomDownloaderMiddleware': 543,'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
}SPIDER_MIDDLEWARES = {'myproject.middlewares.CustomSpiderMiddleware': 543,'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
}

在这个例子中,我们定义了一个下载器中间件 CustomDownloaderMiddleware 和一个爬虫中间件 CustomSpiderMiddleware,并分别设置它们的等级为 543。

常见的中间件及其默认等级

Scrapy 提供了许多内置中间件,每个中间件都有默认的等级。以下是一些常见的下载器中间件及其默认等级:

UserAgentMiddleware: 400
RetryMiddleware: 500
RedirectMiddleware: 600
CookiesMiddleware: 700

对于爬虫中间件,常见的有:

HttpErrorMiddleware: 50
OffsiteMiddleware: 500
RefererMiddleware: 700

结论

中间件是 Scrapy 框架中一个强大的特性,通过正确设置中间件的等级,可以精细控制请求和响应的处理过程。理解和使用中间件的等级设置规则,有助于构建更加灵活和高效的爬虫系统。

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

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

相关文章

NFS服务器、autofs自动挂载综合实验

综合实验 现有主机 node01 和 node02,完成如下需求: 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供 www.rhce.com 虚拟主机 4、该虚拟主机的documentroot目录在 /nfs/rhce 目录 5、该目录由 node02 主机…

jmeter-beanshell学习7-props获取全局变量和设置全局变量

继续写点不痛不痒的小东西。第一篇写了vars设置变量,但是vars只能作用在同一个线程组。跨线程组情况比较少,要是用到跨线程组,有个pros,用法和vars一样。 在setup线程组设置变量a,执行的时候,jmeter会先执行…

Windows 电脑查看 WiFi 密码的方法都有哪些?

从设置面板中查看 当你使用的是笔记本电脑并且连接 WiFi 之后可以在设置面板中查看 WiFi 密码,首先打开设置界面,然后点击网络和 Internet,找到 WiFi 之后点击进入,然后点击管理已知网络。 然后点击已经连接好的无线网络。 进入之…

国产化趋势下源代码数据防泄密的信创沙盒的方案分享

随着国产化的大力推进,越来越多的企事业单位在逐步替换Windows、Linux等操作系统的使用。那么什是国产化了?国产化是指在产品或服务中采用国内自主研发的技术和标注,替代过去依赖的他国的产品和服务,国产化又被称之为“信创”&…

215.Mit6.S081-实验三-page tables

在本实验室中,您将探索页表并对其进行修改,以简化将数据从用户空间复制到内核空间的函数。 一、实验准备 开始编码之前,请阅读xv6手册的第3章和相关文件: kernel/memlayout.h,它捕获了内存的布局。kernel/vm.c&…

macOS系统下载navicat安装包

链接: https://pan.baidu.com/s/1SqTIXNL-B8ZMJxIBu1DfIw?pwdc1z8 提取码: c1z8 安装后效果

虚幻引擎 快速的色度抠图 Chroma Key 算法

快就完了 ColorTolerance_PxRange为容差,这里是0-255的输入,也就是px单位,直接用0-1可以更快 Key为目标颜色

Kafka第四篇——生产数据总体概括,源码解析分区策略,数据收集器,Sender发送线程,key值

目录 流程图以及总体概述 拦截器 分区器以及分区计算策略 为啥进行分区计算? producer生产者怎么知道有哪些分区? 分区计算 如何自定义实现分区器? 想说的在图里啦!宝宝!💡 ​编辑 如果key值忘记传递了呢&a…

python+selenium-UI自动框架之[优化]元素查找和BasePage页面

痛点:在页面查找元素的时候会遇到找不到或者其他无法处理某个字段的情况,又或者想要在输出的log或者report里面显示这个字段名称,这时候加上字段名称就很重要! [3]pythonselenium - UI自动框架之封装查找元素https://mp.csdn.net…

电脑的D盘E盘F盘突然消失了 电脑只剩下C盘了其他盘怎么恢复

现如今随着时代的发展,无纸化办公成为主流,这主要归功于电脑,能够通过电脑完成的工作绝不使用纸质文件,这不仅提高了工作效率,也让一些繁杂的工作变的更加简单。不过电脑毕竟是电子产品,不可避免的会出现一…

通信协议_Modbus协议简介

概念介绍 Modbus协议:一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De f…

Navicat导入sql文件

文章目录 Navicat导入SQL文件,使用默认导入,不做任何修改报错尝试一修改运行时的选择 尝试二修改my.ini的配置文件 Navicat导入SQL文件,使用默认导入,不做任何修改报错 尝试一 修改运行时的选择 取消勾选 ‘每个运行中运行多重查…

一键掌握天气动态 - 基于Vue和高德API的实时天气查询

前言 本文将学习如何使用Vue.js快速搭建天气预报界面,了解如何调用高德地图API获取所需的天气数据,并掌握如何将两者有机结合,实现一个功能丰富、体验出色的天气预报应用 无论您是前端新手还是有一定经验,相信这篇教程都能为您带来收获。让我们一起开始这段精彩的Vue.js 高德…

Mac的系统数据怎么删除 cleanmymac会乱删东西吗 cleanmymac有用吗

作为一款专业级的苹果电脑清理软件,CleanMyMac可以精准识别系统垃圾,有效防止Mac系统数据被误删。软件可以深入系统底层,清理无用的系统数据,优化苹果电脑设置,提升Mac系统性能。有关Mac的系统数据可以删吗&#xff0c…

拥抱 AGI:PieDataCS 引领云原生数据计算系统新范式

自2023年后,人工智能技术进入了一个更为成熟和广泛应用的阶段,人工通用智能(AGI)这一概念也成为了科技界和产业界热议的焦点。本文将结合 AGI 时代背景,从架构设计到落地实践,详细介绍拓数派云原生数据计算…

HTAP 数据库在国有大行反洗钱场景的应用

导读 在金融领域,随着数字化服务的深入和监管要求的提高,反洗钱工作变得尤为关键。洗钱活动不仅威胁金融安全,也对社会秩序构成挑战。本文深入探讨了国产 HTAP 分布式数据库 TiDB 在某国有大行反洗钱系统中的应用实践。 依托 TiDB 构建的新…

springboot大学校园二手书交易APP-计算机毕业设计源码25753

摘 要 在数字化与移动互联网迅猛发展的今天,人们对于图书的需求与消费方式也在悄然改变。为了满足广大读者对图书的热爱与追求,我们倾力打造了一款基于Android平台的图书交易APP。这款APP不仅汇聚了海量的图书资源,提供了便捷的交易平台&…

usbserver工程师手记(三)手工开通 OTP功能

1、设定密钥,用户自行选择一个密钥,以下以密钥为 EAZAYOKNGETBOPC5 为例说明 2、usb server 配置otp 密钥,目前还没有UI 界面开通,后续版本会支持从管理界面开通 curl -X POST -H Content-Type: application/json -H Accept: app…

【深度学习入门篇 ②】Pytorch完成线性回归!

🍊嗨,大家好,我是小森( ﹡ˆoˆ﹡ )! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官、CSDN人工智能领域优质创作者 。 易编橙:一个帮助编程小…

数据结构复习计划之复杂度分析(时间、空间)

第二节:算法 时间复杂度和空间复杂度 算法(Algorithm):是对特定问题求解方法(步骤)的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。 算法可以有三种表示形式: 伪代码 自然语言 流程图 算法的五…