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

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

相关文章:

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

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

SDK环境的安装(测试使用)

1、安装 将文件解压至目录,我的目录为:D:\Program Files\Android 解压后如下: 下载链接如下: sdk下载 提取码见文章最后: 2、配置环境 1、在环境变量中,选择系统变量,点击新建。 变量名:ANDROID_HOME 变量值:“你自己的android-sdk安装路径” (例如我的:D:\Pro…...

【matlab】【python】爬虫实战

目录 引言 具体步骤 1.设置请求选项 2.发送请求并获取响应 3.设置正则表达式 4.执行正则表达式匹配 matlab完整代码 python代码示例 引言 在当今这个信息爆炸的时代,数据已成为推动社会进步和企业发展的核心动力之一。随着互联网的普及和技术的飞速发展&am…...

Android TV跨平台开发心得

这半年来陆陆续续做了一堆poc,刚开始是flutter,结果领导叫停了,说有其他部门做一样的事,真不巧;后来是react native,开发了个demo,上报上去了已经;现在又要做android nativewebview …...

View->裁剪框View的绘制,手势处理

XML文件 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android…...

语言模型的进化:从NLP到LLM的跨越之旅

在人工智能的浩瀚宇宙中&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是一个充满挑战和机遇的领域。随着技术的发展&#xff0c;我们见证了从传统规则到统计机器学习&#xff0c;再到深度学习和预训练模型的演进。如今&#xff0c;我们站在了大型语言模型&#xff…...

应急响应--网站(web)入侵篡改指南

免责声明:本文... 目录 被入侵常见现象: 首要任务&#xff1a; 分析思路&#xff1a; 演示案例: IIS&.NET-注入-基于时间配合日志分析 Apache&PHP-漏洞-基于漏洞配合日志分析 Tomcat&JSP-弱口令-基于后门配合日志分析 (推荐) Webshell 查杀-常规后门&…...

vue3+vue-router+vite 实现动态路由

文章中出现的代码是演示版本&#xff0c;仅供参考&#xff0c;实际的业务需求会更加复杂 什么是动态路由 什么场景会用到动态路由 举一个最常见的例子&#xff0c;比如说我们要开发一个后台管理系统&#xff0c;一般来说后台管理系统都会分角色登录&#xff0c;这个时候也就涉…...

Okhttp hostnameVerifier详解

hostnameVerifier 方法简介核心原理参考资料 方法简介 本篇博文以Okhttp 4.6.0来解析hostnameVerfier的作用&#xff0c;顾名思义&#xff0c;该方法的主要作用就是鉴定hostnname的合法性。Okhttp在初始化的时候我们可以自己配置hostnameVerfier&#xff1a; new OkHttpClien…...

TCP的p2p网络模式

TCP的p2p网络模式 1、tcp连接的状态有以下11种 CLOSED&#xff1a;关闭状态LISTEN&#xff1a;服务端状态&#xff0c;等待客户端发起连接请求SYN_SENT&#xff1a;客户端已发送同步连接请求&#xff0c;等待服务端相应SYN_RECEIVED&#xff1a;服务器收到客户端的SYN请请求&…...

力扣-贪心算法4

406.根据身高重建队列 406. 根据身高重建队列 题目 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或…...

动手学深度学习6.2 图像卷积-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;卷积层_哔哩哔哩_bilibili 代码_哔哩哔哩_bilibili 本节教材地址&#xff1a;6.2. 图像卷积 — 动…...

展开说说:Android服务之bindService解析

前面两篇文章我们分别总结了Android四种Service的基本使用以及源码层面总结一下startService的执行过程&#xff0c;本篇继续从源码层面总结bindService的执行过程。 本文依然按着是什么&#xff1f;有什么&#xff1f;怎么用&#xff1f;啥原理&#xff1f;的步骤来分析。 b…...

node-sass 老版本4.14.0 安装失败解决办法

旧项目 npm install 发现 node-sass 安装 失败 切换淘宝镜像之后 不能完全解决问题。因为需要编译&#xff0c;本地没有Python环境不能实现 安装node-sass时&#xff0c;在install阶段会从Github上下载一个叫binding.node的文件&#xff0c;而「GitHub Releases」里的文件…...

最近很火的字幕截图生成器

网址 https://disksing.com/fake-screenshot/ 最近很火的字幕截图生成器&#xff0c;对于自媒体来说真的太实用了 另外透露一下&#xff0c;你仔细研究就会发现&#xff0c;这是个纯前端的项目...

使用RabbitMQ实现可靠的消息传递机制

使用RabbitMQ实现可靠的消息传递机制 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. RabbitMQ简介 RabbitMQ是一个开源的消息代理软件&#xff0c;实现了高级消息队列协议&#xff08;AMQP&…...

Function Call ReACT,Agent应用落地的加速器_qwen的function calling和react有什么不同

探索智能体Agent的未来之路&#xff1a;Function Call与ReACT框架的较量&#xff0c;谁能引领未来&#xff1f; 引言 各大平台出现智能体应用创建&#xff0c;智能体逐渐落地&#xff0c;背后的使用哪种框架&#xff1f; 随着各大平台&#xff0c;例如百度千帆APPbuilder、阿…...

Java的JSONPath(fastjson)使用总结

背景 最近使用json实现复杂业务配置, 因为功能需要解析读取json的中节点数据。如果使用循环或者stream处理&#xff0c;可以实现&#xff0c;但是都过于麻烦。在想能否使用更简单json读取方式&#xff0c;正好发现fastjson支持该功能&#xff0c;本文做一个记录 案例说明 示…...

【大模型】大语言模型:光鲜背后的阴影——事实准确性和推理能力的挑战

大语言模型&#xff1a;光鲜背后的阴影——事实准确性和推理能力的挑战 引言一、概念界定二、事实准确性的局限2.1 训练数据的偏差2.2 知识的时效性问题2.3 复杂概念的理解与表述 三、推理能力的局限3.1 表层理解与深层逻辑的脱节3.2 缺乏常识推理3.3 无法进行长期记忆和连续推…...

Java面向对象练习(1.手机类)(2024.7.4)

手机类 package Phone;public class Phone {private String brand;private int price;private String color;public Phone(){}public Phone(String brand, int price, String color){this.brand brand;this.price price;this.color color;}public void setBrand(String bra…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...