千家信息网

Python中Spider Middleware的使用方法

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,今天就跟大家聊聊有关Python中Spider Middleware的使用方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言大部分人的身上
千家信息网最后更新 2025年01月19日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安全错误 数据库的锁怎样保障安全 网络安全专业色弱有什么影响 软件开发完成的任务是什么 中国政企网络安全上岗证题目 衡阳软件开发好的大专学校 网络安全 原则 审计 漏洞 数据库事务日志是什么 使用ecc保证网络安全访问 选型软件开发模板 网络安全专项检查情况通报会 c 数据库 之间比较 电脑连接数据库显示错误 数据库的建立与维护实验目的 岳阳学软件开发 软件开发计划测量和分析 网络安全知识竞赛准备 嵌入式服务器设计流程 如何查服务器的sn 主机写入数据库 服务器安全狗杀毒版 外服手游英雄联盟服务器卡 使用ecc保证网络安全访问 对网络技术的了解与认识 进出口数据库技术流视频 远程连接数据库 大学数据库原理及应用期末考试 服务器去毛刺视频教程 联盟服务器哪个部落好 高中生网络安全知识教育教案 江西综合网络技术咨询口碑推荐 百度网络安全员培训班
0