使用 Scrapy 的 HTTP 代理中间件实现按请求选择代理
在把旧的自定义认证中间件复制进爬虫之前,先使用 Scrapy 的请求元数据和代理中间件。
Scrapy 的 HTTP 代理中间件从请求元数据中读取代理:
yield scrapy.Request(
'https://example.com/',
callback=self.parse,
meta={'proxy': 'http://203.0.113.10:8080'},
)
替换文档中的端点并让中间件保持启用。HTTP 代理列表为这个请求 URL 提供公开候选。这会选择请求的路由;代理池需要单独的挑选逻辑。
认证跟随所选端点
内置中间件处理通过其支持的代理 URL 及相应授权头提供的凭据。转义 URL 保留字符,并避免记录该 URL。
端点改变后,单独的中间件不应再为之前的代理保留 Basic 头。让同一层同时管理路由及其凭据。
选择顺序与默认值
如果自定义下载器中间件选择代理,请让它在内置代理中间件处理请求之前运行。检查所安装版本的顺序和 API;过时的 scrapy.contrib 导入属于较旧版本。
进程环境也可以提供按方案区分的默认值。对于有意直连的请求,请使用有文档记载的 proxy 元数据特殊行为:缺少键不一定意味着直接访问。
检查实际结果。407 与代理认证有关,而网站的速率限制或访问拒绝可能在路由正常之后才出现。