scrapy爬虫中间件和下载中间件的使用

一、关于中间件

之前文章说过,scrapy有两种中间件:爬虫中间件和下载中间件,他们的作用时间和位置都不一样,具体区别如下:

  1. 爬虫中间件(Spider Middleware)

作用: 爬虫中间件主要负责处理从引擎发送到爬虫的请求和从爬虫返回到引擎的响应。这些中间件在请求发送给爬虫之前或响应返回给引擎之前可以对它们进行处理。

  1. 下载中间件(Downloader Middleware)

作用: 下载中间件主要负责处理引擎发送到下载器的请求和从下载器返回到引擎的响应。这些中间件在请求发送给下载器之前或响应返回给引擎之前可以对它们进行处理。

  1. 中间件作用优先级

只需要记住,级别越小的越接近scrapy的引擎,结合scrapy的数据流,就能记住每个中间件的作用时机。
在这里插入图片描述

结合图可知:

  • 在下载中间件中:
  • 对于process_request()来说,优先级数字越小越先被调用;
  • 对于process_response()来说,优先级数字越大越先被调用
  • 在爬虫中间件中:
  • 对于process_spider_input()来说,优先级数字越小越先被调用;
  • 对于process_spider_output()来说,优先级数字越大越先被调用

那么哪来的这些方法?

二、定义中间件的通用模板

  1. 先看一个内置的中间件:UserAgentMiddleware
    在这里插入图片描述
  • init: 在这里进行中间件的初始化,可以使用 settings 对象获取配置信息
  • from_crawler:在这里通过 crawler 对象创建中间件的实例,可以获取全局配置信息
  • spider_opened(可选): 在这里执行爬虫启动时的初始化操作,例如打开文件、连接数据库等
  • process_request(可选): 在这里对请求进行预处理,例如修改请求头、添加代理等
  • 那么同理process_response(可选)
  1. 爬虫中间件模板
class MySpiderMiddleware(object):def __init__(self, settings):# 在这里进行中间件的初始化,可以使用 settings 对象获取配置信息pass@classmethoddef from_crawler(cls, crawler):# 在这里通过 crawler 对象创建中间件的实例,可以获取全局配置信息settings = crawler.settingsreturn cls(settings)def process_spider_input(self, response, spider):# 在这里处理从下载器传递给爬虫的响应对象return responsedef process_spider_output(self, response, result, spider):# 在这里处理爬虫生成的结果,例如对结果进行过滤或修改return resultdef process_spider_exception(self, response, exception, spider):# 在这里处理爬虫产生的异常pass
  1. 下载中间件模板
class MyDownloaderMiddleware(object):def __init__(self, settings):# 在这里进行中间件的初始化,可以使用 settings 对象获取配置信息pass@classmethoddef from_crawler(cls, crawler):# 在这里通过 crawler 对象创建中间件的实例,可以获取全局配置信息settings = crawler.settingsreturn cls(settings)def process_request(self, request, spider):# 在这里对请求进行预处理,例如修改请求头、添加代理等return None  # 返回 None 表示继续处理请求,或者返回一个新的请求对象def process_response(self, request, response, spider):# 在这里对响应进行处理,例如修改响应内容、判断是否重新发送请求等return response  # 返回响应对象,或者返回一个新的响应对象def process_exception(self, request, exception, spider):# 在这里处理请求异常,例如记录日志、发送通知等pass

三、位置

在这里插入图片描述

我们自定义的中间件在middlewares.py中编写类就可以

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

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

相关文章

用 CloudCanal 快速验证阿里云 EMR for StarRocks 和 Doris

背景 StarRocks 和 Doris 是近两年来相当流行的、国产的、开源的实时数仓,不仅数据检索、分析能力出众,而且数据准备实时性好、准确度高、使用丝滑,可如同在线数据库般使用。 CloudCanal 在早期即支持此两种实时数仓,并且经过多…

JavaScript 内存泄漏的检测与防范:让你的程序更稳定

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

.netcore 操作aspose.words导出pdf

个人重点关注的是生成曲线图的部分,浪费了我很多时间 chart.Legend.Position LegendPosition.Top; 控制图形的显示位置,这个地方好像必须要选一个位置,否则会内容显示不全,我开始用的LegendPosition.None,他就显示…

京东数据运营-京东数据开放平台-鲸参谋10月粮油调味市场品牌店铺销售数据分析

鲸参谋监测的京东平台10月份料油调味市场销售数据已出炉! 根据鲸参谋数据显示,今年10月份,京东平台粮油调味市场的销量将近4600万,环比增长约10%,同比降低约20%;销售额将近19亿,环比增长约4%&am…

VT-VRPA2-1-1X/V0/T5控制4WRE6比例方向阀放大板

带阀芯位移反馈不带集成式放大器比例方向阀控制放大器,替代力士乐同型号产品,可以完全互换使用;适用于控制力士乐系列带电位置反馈的4WRE6通径和4WRE10通径2X系列比例方向阀;0~10V、4~20mA指令控制信号任意可选;直接安…

Docker 镜像及其命令

文章目录 镜像Docker 镜像加载原理联合文件系统bootfs和rootfs镜像分层 镜像分层的优势容器层常用命令 镜像 镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境&#xff…

cmake和vscode 下的cmake的使用详解(二)

第四讲: GDB 调试器 前言: GDB(GNU Debugger) 是一个用来 调试 C/C 程序 的功能强大的 调试器 ,是 Linux 系统开发 C/C 最常用的调试器 程序员可以 使用 GDB 来跟踪程序中的错误 ,从而减少程序员的工作量。 Linux 开发 C/C …

SQL Sever 基础知识 - 限制行数

SQL Sever 基础知识 - 三、限制行数 三、限制行数第1节 OFFSET FETCH - 限制查询返回的行数1.1 OFFSET 和 FETCH 子句1.2 SQL Server OFFSET 和 FETCH 示例 第2节 SELECT TOP - 限制查询结果集中返回的行数或行的百分比2.1 SELECT TOP 子句2.2 PERCENT2.3 WITH TIES2.4 SELECT …

Excel导入操作

<template><el-dialogwidth"500px"title"员工导入":visible"showExcelDialog"close"$emit(update:showExcelDialog, false)"><el-row type"flex" justify"center"><div class"upload-e…

计算机毕业设计 基于SpringBoot的敬老院管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

计算机视觉(OpenCV+TensorFlow)

计算机视觉&#xff08;OpenCVTensorFlow&#xff09; 文章目录 计算机视觉&#xff08;OpenCVTensorFlow&#xff09;前言7. 图像直方图绘制直方图绘制直方图有两种方式&#xff1a; 掩膜 8. 直方图均衡化直方图均衡化的介绍直方图均衡化的步骤自适应直方图均衡化 9. 图像转换…

HarmonyOS ArkTS与c++交互通信

一、创建Native C Module 1、右键项目->new->module 如图&#xff1a; 2、修改build-profile.json5配置 "externalNativeOptions": {"path": "./src/main/cpp/CMakeLists.txt","arguments": "-v -DOHOS_STLc_shared&quo…