千家信息网

Python中Spider Middleware的使用方法

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天就跟大家聊聊有关Python中Spider Middleware的使用方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言大部分人的身上
千家信息网最后更新 2026年11月02日Python中Spider Middleware的使用方法

今天就跟大家聊聊有关Python中Spider Middleware的使用方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

前言

大部分人的身上,有一种近乎无解的矛盾--

★

想要养成早起的习惯,却一不小心刷手机到凌晨两点;

看到一篇干货文章,第一反应是加收藏夹下次再看(收藏从未停止,学习从未开始。/ 收藏==学会);

想要瘦身塑形,却在深夜破功:"吃饱了才有力气减肥";

看到一门不错的课程,却还是告诉自己有时间了再学......

"

Spider Middleware的使用方法

Spider Middleware是介入到Scrapy的Spider处理机制的钩子框架。

当Downloader生成Response之后,Response会被发送给Spider,在发送Spider之前,Response会首先经过Spider Middleware处理,当Spider处理生成Item和Request之后,Item和Request还会经过Spider Middleware的处理。

Spider Middleware有如下三个作用:

  • 我们可以在Downloader生成Response发送给Spider之前,也就是Response发送给Spider之前对Response进行处理。
  • 我们可以Spider生成Request发送给Scheduler之前,也就是Request发送给Scheduler之前对Request进行处理。
  • 我们可以在Spider生成Item发送给Item Pipeline之前,也就是Item发送给Item Pipeline之前对Item进行处理。

使用说明

需要说明的是Scrapy其实已经提供了许多Spider Middleware,它们被SPIDER_MIDDLEWARES_BASE这个变量所定义。

SPIDER_MIDDLEWARE_BASE变量内容如下:

{
'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
'scrapy.spidermiddlewares.referer.RefererMiddleware': 700,
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800,
'scrapy.spidermiddlewares.depth.DepthMiddleware': 900,
}

和Downloader Middleware一样,Spider Middleware首先加入到SPIDER_MIDDLEWARES设置当中,该设置会和Scrapy中SPIDER_MIDDLEWARES_BASE定义的Spider Middleware合并。然后根据键值的数字优先级排序,得到一个有序列表。第一个Middleware是最靠近引擎的,最后一个MIddleware是最靠近Spider的。

核心方法

Scrapy内置的Spider Middleware为Spider提供了基础功能。如果我们想要拓展其功能,只需要实现某个方法即可。

每个Spider Middleware都定义了以下一个或多个方法的类,核心方法有如下4个:

  • process_spider_input(response, spider)
  • process_spider_output(response, result, spider)
  • process_spider_exception(response, exception, spider)
  • process_start_requests(start_requests, spider)

process_spider_input(response, spider)

当Response通过Spider Middleware时,该方法被调用,处理该Response。

方法的参数有两个:

  • response:即Response对象,即被处理的Response
  • Spider:即Spider对象,即该Response对应的Spider

process_spider_input()应该返回None或抛出异常。

  • 如果返回None,Scrapy将继续处理该Response,调用其他的Spider Middleware直到Spider处理该Response。
  • 如果抛出一个异常,Scrapy将不会调用任何其他Spider Middleware的process_spider_input()的方法,并调用Request的errback()方法。errback()的输出将会以另一个方向被重新输入到中间件中,使用process_spider-output()方法来处理,当其抛出异常时,则调用process_spider_exception()来处理。

process_spider_output(response, result, spider)

当Spider处理Response返回结果时,该方法被调用。

方法的参数有三个:

  • response,即Response对象,即生成该输出的Response;
  • result,包含Request或Item对象的可迭代对象,即Spider返回的结果;
  • spider,即Spider对象,即其结果对应的Spider。

process_spider_output()必须返回包含Request或Item对象的可迭代对象。

process_spider_exception(response, exception, spider)

当Spider或Spider Middleware的process_spider_input()方法抛出异常时,该方法被调用。

方法的参数有三个:

  • response,即Response对象,即异常被抛出时被处理的Response。
  • exception,即Exception对象,被抛出的异常。
  • spider,即Spider对象,即抛出异常的Spider

process_spider_exception()要么返回None,要么返回一个包含Response或Item对象的可迭代对象。

  • 如果其返回None,Scrapy将继续处理该异常,调用其他Spider Middleware中的process_spider_exception()方法,直到所有的Spider Middleware被调用。
  • 如果返回一个可迭代对象,则其他的Spider Middleware的process_spider_output()方法被调用,其他的process_spider_exception()将不会被调用。

process_start_requests(start_requests, spider)

该方法以Spider启动的Request为参数被调用,执行的过程类似于process_spider_output(),只不过其他没有相关联的Response并且必须返回Request。

方法的参数有两个:

  • start_requests,即包含Request的可迭代对象,即Start Requests
  • spider,即Spider对象,即Start Requests所属的Spider

其必须返回一个包含Request对象的可迭代对象。

开启Spider Middleware

每当我们创建一个新的项目的时候,就会生成一个middlewares.py的文件,在这个文件中有一个类:MiddletestSpiderMiddleware,这个类与我们创建的项目名相关,我创建的项目名为``Middletest`。因此,当我们修改这个项目名的时候,这个类名也要跟着修改。

在这个类中,里面就有我们上面所描述的四个核心方法。

我们要开启这个Spider Middleware,可以到settings.py里面去开启:

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
SPIDER_MIDDLEWARES = {
'middletest.middlewares.MiddletestSpiderMiddleware': 543,
}

只需要取消注释即可。

看完上述内容,你们对Python中Spider Middleware的使用方法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

方法 对象 处理 生成 迭代 参数 内容 项目 使用方法 三个 也就是 核心 结果 两个 从未 功能 变量 文件 时候 要么 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司 深圳九邦互联网科技有限公司 朗新科技与工业互联网 金融科技与互联网金融 猪兼强互联网科技 互联网科技公司电话 远信互联网科技 极限挑战互联网科技 美国互联网前沿科技 深圳卡尔迅互联网科技有限公司怎么样 太原新华互联网科技学校怎么样 崇明区互联网教育科技诚信经营 世界互联网领先科技成果获奖 互联网科技收购价值 求路客互联网科技电话 恒生科技指数 中概互联网 杭州科技互联网公司有哪些 承德科技产业互联网平台 互联网科技创业计划的风险分析 互联网科技自媒体灵感 互联网科技工作委员会 互联网与科技金融数据 奇酷互联网科技 远拓互联网科技 互联网金融科技公司干啥的 民营互联网公司国防科技 工业互联网等科技实现智能化赋能 烟台灵鸽互联网科技有限公司 互联网科技快讯热点 湖北辰鑫科技互联网
0