Scrapy专题三[中间件]

本文详细介绍了Scrapy框架中的SpiderMiddleware和DownloaderMiddleware组件,包括如何自定义中间件、内置中间件的功能、中间件的生效机制及排序规则。通过具体实例展示了如何在settings.py中配置中间件,以及如何关闭或调整系统默认中间件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scrapy主要有2个中间组件,分别是Spider Middleware与Download Middleware,这个两类中间组件都可以自定义多种中间组件。每个组件都需要写成一个类的形式。

Downloader Middleware组件[DM]

如何使自定义的DM生效

为了使得自己定义的DM生效,首先需要在settings.py文件它。例如我们定义一个UserAgentMiddleware组件,然后在settyings.py文件中,

DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.UserAgentMiddleware': 543,
}

当启动项目时,系统自动将自己定义的UserAgentMiddleware中间件加入到已系统默认中间件列表中。系统默认的中间组件为:

{
'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100,
'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300,
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350,
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 400,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 500,
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
'scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware': 560,
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590,
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600,
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750,
'scrapy.downloadermiddlewares.stats.DownloaderStats': 850,
'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900,
}

DM排序规则

中间组件之间的排序规则是通过它们设置值的大小排序,对于下载器中间组件来说。我们设置的中间件的值越小,排在越靠前,也就是越靠近Scrapy引擎;越大,排序靠后,离下载器组件越近。

关闭项目自带的DM中间件

如果自己想要关闭系统默认带的下载中间件,可以将它的值设为None,例如关闭user-agent中间件:

DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.UserAgentMiddleware': 543,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
}

自定义一个DM

每一个中间组件都是一个python类,这个类中必须包含如下一个或者多个方法:
在这里插入图片描述
这里,入参:
request(Request object),
spider(Spider object),
response(Response object),
exception (an Exception object),
crawler (Crawler object)

内置的DM

Spider Middleware[SM]

SM生效

和DM类似。

SPIDER_MIDDLEWARES = {
'myproject.middlewares.CustomSpiderMiddleware': 543,
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': None,
}

内置的SM

{
'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,
}

自定义SM

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值