何为下载中间件
下载器中间件是 Scrapy的请求/响应
处理的类。这是一个轻量级的低级系统,用于全局更改Scrapy的请求和响应。
使用
要激活下载程序中间件组件,请将其添加到 DOWNLOADER_MIDDLEWARES设置中,这是一个dict,其键为中间件类路径,其值为中间件顺序(权重)
# Enable or disable downloader middlewares # See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html DOWNLOADER_MIDDLEWARES = { 'lagouApp.middlewares.LagouappDownloaderMiddleware': 543, }
将该DOWNLOADER_MIDDLEWARES
设置与DOWNLOADER_MIDDLEWARES_BASE
Scrapy 中定义的设置合并 (而不是被覆盖),然后按顺序进行排序,以获取启用的中间件的最终排序列表,请求会按照小到大执行
,响应会按照大到小执行
,其各个中间件权重
大小的决定,可参照DOWNLOADER_MIDDLEWARES_BASE
设置。
内置下载中间件
CookiesMiddleware
属于
scrapy.downloadermiddlewares.cookies.CookiesMiddleware
类
使用此中间件,可以处理需要cookie的站点,例如使用会话的站点。它会跟踪Web服务器发送的cookie,并像网络浏览器一样,将其发送回后续请求(来自该蜘蛛)。
注意 meta.get(‘cookiejar’) 不是“粘性”的您需要在后续请求中继续传递它
def parse_page(self, response):
# do some processing
return scrapy.Request(
"https://bigdataboy.cn",
meta={
'cookiejar':response.meta['cookiejar']
},
callback=self.parse_other_page
)
相关设置
COOKIES_ENABLED
默认启用 cookies
# Disable cookies (enabled by default) 是否启用 cookies
# COOKIES_ENABLED = True
COOKIES_DEBUG
如果启用,Scrapy将记录请求中发送的所有cookie(即Cookie 标头)和响应中接收的所有cookie(即Set-Cookie标头)。
COOKIES_DEBUG = False
开启效果
2020-01-14 20:20:26 [scrapy.downloadermiddlewares.cookies] DEBUG: Received cookies from: <200 https://bigdataboy.cn>
Set-Cookie: JSESSIONID=ABAAABAAAEEAAII73F8A39DC3BF1352400CBB34ABA2AB47; Path=/; HttpOnly
Set-Cookie: SEARCH_ID=11c20adceed742cd9ed906fe2e0c47ad; Version=1; Max-Age=86400; Expires=Wed, 15-Jan-2020 12:20:28 GMT; Path=/
Set-Cookie: user_trace_token=20200114202028-23b9b484-6bec-4761-a4ec-4a08c2bae9e9; Max-Age=31536000; Path=/; Domain=.lagou.com;
2020-01-14 20:20:26 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://bigdataboy.cn> (referer: None)
UserAgentMiddleware
属于 scrapy.downloadermiddlewares.useragent.UserAgentMiddleware 类
允许蜘蛛覆盖默认用户代理
的中间件。
为了使Spider可以覆盖默认用户代理,user_agent
必须设置其属性。
DefaultHeadersMiddleware
属于
scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware
类
该中间件会把setting
中指定的所有默认请求标头加入
HttpProxyMiddleware
属于 scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware 类
该中间件通过设置 Request.meta 的 proxy 值
来 设置代理池 和 设置 Request.headers里的认证头部
(Proxy-Authorization)
DownloadTimeoutMiddleware
属于 scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware 类
该中间件会获取 DOWNLOAD_TIMEOUT
的值给 蜘蛛设置下载的超时时间 。
还可以给每个 Request.meta
设置 download_timeout
属性,单独设置超时时间。
HttpAuthMiddleware
属于 scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware 类
该中间件使用基本访问身份验证
(也称为HTTP身份验证)对从某些蜘蛛生成的所有请求进行身份验证。
要启用某些蜘蛛网的HTTP身份验证,请设置这些蜘蛛网的http_user
和http_pass
属性。
from scrapy.spiders import CrawlSpider class SomeIntranetSiteSpider(CrawlSpider): http_user = 'someuser' http_pass = 'somepass' name = 'bigdataboy.cn' # .. rest of the spider code omitted ...
HttpCacheMiddleware
属于 scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware 类
该中间件为所有HTTP请求和响应提供了低级缓存。它必须与缓存存储后端以及缓存策略结合使用
HttpCompressionMiddleware
属于 scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware 类
该中间件允许从网站发送/接收
压缩(gzip,deflate)流量。
如果安装了brotlipy
,此中间件还支持解码brotli压缩的响应
。
相关设置
COMPRESSION_ENABLED
COMPRESSION_ENABLED = True
RedirectMiddleware
属于 scrapy.downloadermiddlewares.redirect.RedirectMiddleware 类
该中间件根据响应状态处理请求的重定向。
可以在 Request.meta
的 redirect_urls
中找到请求通过的URL(在重定向时)。
还可以在 Request.meta
的 redirect_reasons
中找到 每个重定向的背后原因。例如:。[301, 302, 307, 'meta refresh']
相关设置
REDIRECT_ENABLED
# 启用 重定向中间件
REDIRECT_ENABLED = True
REDIRECT_MAX_TIMES
# 单个请求将遵循的最大重定向数。
REDIRECT_MAX_TIMES = 20
RetryMiddleware
属于 scrapy.downloadermiddlewares.retry.RetryMiddleware 类
中间件,用于重试失败的请求,这些请求可能是由临时问题(例如连接超时或HTTP 500错误)引起的。
蜘蛛完成对所有常规(非失败)页面的爬网之后,将在抓取过程中收集失败的页面,并在最后进行重新请求。
相关设置
RETRY_ENABLED
# 启用“重试”中间件。
RETRY_ENABLED = True
RETRY_TIMES
# 除了首次下载外,最大重试次数。
RETRY_TIMES = 2
RETRY_HTTP_CODES
# 重试哪个HTTP响应代码。
RETRY_HTTP_CODES = [500, 502, 503, 504, 522, 524, 408, 429]
DownloaderStats
属于 scrapy.downloadermiddlewares.stats.DownloaderStats 类
中间件,用于存储通过它的所有请求,响应和异常的统计信息。
要使用此中间件,必须启用该 DOWNLOADER_STATS = True
(默认开启)。
AjaxCrawlMiddleware
属于 scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware 类
基于元片段html标签找到“ AJAX可抓取”页面变体的中间件。有关 更多信息,请参见 https://developers.google.com/webmasters/ajax-crawling/docs/getting-started。
版权声明:《 Scrapy 下载中间件 详解 》为明妃原创文章,转载请注明出处!
最后编辑:2020-1-14 13:01:40