TL;DR
- Scrapy的内置
HttpProxyMiddleware读取Request.meta["proxy"]或标准代理环境变量;仅在选择策略或遥测时需要自定义中间件。 - 在内置中间件处理请求之前设置请求上的代理URL。每个请求的
meta["proxy"]会覆盖环境代理并忽略no_proxy。 - 仅在配置的、授权的代理路由中轮换,并为有状态的请求链保持稳定的路由。
- Scrapy的RetryMiddleware单独处理暂时错误与代理选择。不要盲目重试407身份验证失败。
- Nstdata提供生成的代理主机、端口、用户名、密码和会话参数;Scrapy不生成这些值。
设置Scrapy代理中间件前需要什么?
您需要一个Scrapy项目,一个允许的目标,以及您提供商的有效代理URL。对于Nstdata,创建一个频道,启用代理生成,选择产品和路由参数,并从频道详情复制生成的URL。将该URL保存在秘密存储中。Nstdata代理指南列出了网关主机、端口、频道ID、密码、国家、会话持续时间和会话ID。不要替换猜测的网关或在settings.py中硬编码实际的频道密码。
在虚拟环境中用python -m pip install scrapy安装Scrapy,然后用scrapy startproject proxy_demo创建一个项目。将下面的示例放入项目现有的设置和爬虫文件中。这些代码片段是经过文档支持的,但不是实时的Nstdata握手:本文中不可用频道凭据。
Scrapy如何为请求选择代理?
Scrapy通过请求的proxy元键或通过其内置的HttpProxyMiddleware处理的代理环境变量选择代理。Scrapy下载器中间件参考指出,每个请求的值优先于http_proxy和https_proxy,并忽略no_proxy。这种优先级可能会让那些运行时配置了公司代理的团队感到惊讶。
代理URL通常以http://开头,即使是指向HTTPS目标。该方案标识代理连接,而不是目标。Scrapy的内置下载处理程序并非全部支持SOCKS;当前文档将HttpxDownloadHandler列为支持SOCKS的处理程序,并指出的限制。使用您的部署支持的协议和处理程序组合。




