scrapy 中间件
注意:中间件在配置文件中,后面的数值很重要
一、下载中间件
注意:from_crawler 要返回 cls() 对象或抛出异常,cls() -> __init__方法
1、process_reuqest
何时执行: request ->(下载中间件) 下载器
返回值
None: 继续执行后面中间件的链
response:不会执行request_process和request_exception方法,不会执行下载请求,直接执行request_response
request:返回给调度器,让调度器重新分配
IngoreRequest:执行process_exception方法,若没有执行request.errback方法,若没有此方法,则异常会被忽略,日志都没有
2、process_response
何时执行:下载器返回response->调度器
返回值
response:继续执行后续的process_response方法
request:停止执行process_response方法,返回给调度器,调度器重新分配
IgnoreRequest:执行request.errback,若没有,则异常会被忽略,日志也没有
3、process_exception
何时执行:执行下载器的时候有异常抛出,或process_request方法中返回IngoreRequest
返回值
None:继续执行后面的process_exception
response:直接执行process_response方法
request:停止执行process_exception方法,返回给调度器,重新分配
二、默认中间件
'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100, # 请求robots.txt文件,并解析其中的规则 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300, # Basic-auth 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350, # 请求超时 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 400, # 默认请求头 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 500, # User-agent 'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550, # 若果下载失败,重试几次 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580, # 使Meta标签重定向 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590, # 压缩 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600, # 状态码300的重定向 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700, # Cookie 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750, # 代理 'scrapy.downloadermiddlewares.stats.DownloaderStats': 850, # 下载信息统计 'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900, # 下载结果的缓存

浙公网安备 33010602011771号