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

相关推荐

  1. 【Scrapy】Scrapy 中间等级设置规则

    2024-07-13 05:36:02       25 阅读
  2. 中间

    2024-07-13 05:36:02       40 阅读
  3. Gin框架: 控制器, 中间的分层设计案例

    2024-07-13 05:36:02       47 阅读
  4. 中间学习】什么是中间

    2024-07-13 05:36:02       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 05:36:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 05:36:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 05:36:02       58 阅读
  4. Python语言-面向对象

    2024-07-13 05:36:02       69 阅读

热门阅读

  1. 智能运维提升企业长期安全防御能力

    2024-07-13 05:36:02       23 阅读
  2. Linux上如何安装ffmpeg视频处理软件

    2024-07-13 05:36:02       25 阅读
  3. Xcode多任务处理指南:释放iOS应用的并发潜能

    2024-07-13 05:36:02       21 阅读
  4. 力扣题解( 最长定差子序列)

    2024-07-13 05:36:02       26 阅读
  5. npm和yarn清理缓存命令

    2024-07-13 05:36:02       21 阅读
  6. C/C++服务器基础(网络、协议、数据库)

    2024-07-13 05:36:02       23 阅读