如何在 Python Scrapy 中配置并轮换代理 IP

更新于:

Scrapy 基于异步 Twisted 引擎,内置了运行在优先级 750 的 HttpProxyMiddleware,可自动解析分配给 request.meta['proxy'] 的 http://user:pass@ip:port 代理字符串。仅需在优先级 740 编写一段 10 行左右的自定义下载器中间件(Downloader Middleware),你的爬虫即可全自动轮换使用 VinaProxy 不限流量的静态 IP 池。

Scrapy · HTTP Proxy Format
request.meta['proxy'] = 'http://user:pass@ip:port'
独享IPv4(机房)
🇺🇸 United States
有货
低至
₫20,000 / IP / 月
≈ US$0.74 · 以VND结算
批量阶梯价格
  • 1 个IP₫40,000
  • 5+ 个IP₫35,000
  • 10+ 个IP₫25,000
  • 20+ 个IP₫25,000
  • 50+ 个IP₫25,000
  • 100+ 个IP₫25,000
  • 200+ 个IP₫25,000
  • 500+ 个IP₫25,000
  • 1000+ 个IP₫22,000
  • 2000+ 个IP₫20,000
购买United States代理
独享IPv4(机房)
🇬🇧 United Kingdom
有货
低至
₫20,000 / IP / 月
≈ US$0.74 · 以VND结算
批量阶梯价格
  • 1 个IP₫40,000
  • 5+ 个IP₫35,000
  • 10+ 个IP₫25,000
  • 20+ 个IP₫25,000
  • 50+ 个IP₫25,000
  • 100+ 个IP₫25,000
  • 200+ 个IP₫25,000
  • 500+ 个IP₫25,000
  • 1000+ 个IP₫22,000
  • 2000+ 个IP₫20,000
购买United Kingdom代理

Scrapy 代理中间件执行顺序与并发控制参数

由于内置的 HttpProxyMiddleware 在优先级 750 运行,负责剥离代理 URL 中的 user:pass 并将其编码为 Proxy-Authorization 标头,因此任何为 request.meta['proxy'] 赋值的自定义中间件都必须使用更小的优先级数值(例如 740):

Scrapy 配置项推荐取值技术功能与作用
request.meta['proxy']'http://user:pass@ip:port'指定本次 HTTP 请求经过的特定 VinaProxy 代理节点
中间件优先级740(早于 750)确保请求在进入内置 HttpProxyMiddleware 前完成代理与鉴权赋值
CONCURRENT_REQUESTS_PER_IP2 到 4限制每个代理 IP 的并发套接字数,防止触发目标站 HTTP 429 限流
AUTOTHROTTLE_ENABLEDTrue依据目标站点的响应延迟动态微调爬取间隔时间

面向海量规模 Scrapy 采集的最佳实践

  • 在中间件的 from_crawler() 方法中加载 VinaProxy 代理列表,并在 process_request() 中执行 request.meta['proxy'] = random.choice(self.proxies) 随机选取节点
  • 同时开启 RANDOMIZE_DOWNLOAD_DELAY = True 与 DOWNLOAD_DELAY = 1.0,使每个代理 IP 的请求间隔具备随机波动,避免产生机械化规律
  • 当遭遇重试状态码(429 或 503)时,在重新将请求放回队列前更换另一个新的代理 IP

操作步骤

  1. 1

    将代理池格式化为 http://user:pass@ip:port

    将 VinaProxy 代理列表粘贴至我们的 代理格式转换工具 批量获取标砖 URL 字符串格式。

  2. 2

    在 middlewares.py 中编写 ProxyPoolMiddleware

    实现 process_request(self, request, spider) 方法并指定 request.meta['proxy'] = random.choice(self.proxies)。

  3. 3

    在 settings.py 中以优先级 740 注册中间件

    在 DOWNLOADER_MIDDLEWARES 中添加 'myproject.middlewares.ProxyPoolMiddleware': 740,并配置 CONCURRENT_REQUESTS_PER_IP = 2。

  4. 4

    通过 scrapy shell 或爬虫命令进行连通测试

    针对 https://vinaproxy.com/api/my-ip 发送测试请求,验证代理轮换与认证是否正常运作。

常见问题

为什么将自定义代理中间件优先级设为 800 时会导致认证失效?

Scrapy 内置的 HttpProxyMiddleware 运行在优先级 750。如果自定义中间件设为 800(排在 750 之后),URL 中携带的 user:pass 无法被转换成 Proxy-Authorization 请求头。请务必将中间件优先级配置在 750 之前(如 740)。

Scrapy 会对每个代理节点保持长连接吗?

是的。Twisted 底层的连接池会针对每个代理端点维护持久的 TCP keep-alive 连接,大幅减少握手开销。

数百万级网页抓取任务中,VinaProxy 代理会产生流量超额计费吗?

不会。所有 VinaProxy 独享 IPv4 与静态 ISP 套餐均包含无限制的月度流量。

使用不限流量的静态 IP 池扩展你的 Scrapy 爬虫集群

覆盖 7 大国家的高品质批量独享 IPv4 与静态 ISP 代理,即时开通。

购买 Scrapy 代理

相关文章

按平台选择代理
网络爬虫代理:面向 24/7 爬虫的不限流量独享 IPv4 与 ISP 代理池
为 Python、Playwright、Selenium 和 Scrapy 提供高速 HTTP(S) 独享 IPv4 与静态 ISP 代理,享无限月度流量。
代理配置教程
如何在Python Requests中使用代理(HTTP/HTTPS与Session连接池)
在Python requests与requests.Session()中配置带认证的HTTP(S)代理。解决407 ProxyError异常并实现静态IP池轮换。
代理配置教程
如何在 Playwright 中设置代理(浏览器级与 Per-Context 认证)
在 Node.js 和 Python 的 Playwright 中配置带认证的 HTTP(S) 代理。通过 BrowserContext 在单一浏览器实例中运行多个独立的静态 IP。
免费工具
批量代理格式转换工具(100% 浏览器本地安全处理)
100% 浏览器本地运行的批量代理格式转换工具。支持在 ip:port:user:pass、user:pass@ip:port、http:// URL、SOCKS5 URI、JSON 数组及 FoxyProxy 导入格式之间即时转换。
按平台选择代理
SEO 与 SERP 排名追踪代理:精准监测 7 国搜索结果排名
追踪精准本地化关键词排名,审查 Geo 重定向,并使用不限流量独享 IPv4 与静态 ISP 代理运行 Screaming Frog 全站抓取。
按平台选择代理
Amazon代理IP:隔离Seller Central、KDP与Merch账号,严防关联风险
杜绝Amazon Seller Central、KDP及Merch on Demand账号关联封禁。提供美国静态ISP与英国/日本独享IPv4私有代理。
IPV4 · united states
美国独享IPv4代理:专用于大数据采集、SEO追踪与广告验证的高速美国IP
美国独享IPv4代理:专用于数据爬取、排名跟踪、广告验证及亚马逊调研。静态独享IP,不限流量,快速开通。
IPV4 · united kingdom
英国独享IPv4代理:面向跨境卖家、SEO与广告营销的静态英国IP
英国独享IPv4代理:专用于eBay英国与Amazon.co.uk调研、谷歌英国排名、广告验证及社交账号运营。不限流量。