Scrapy 是 Python 最流行的爬虫框架,设置代理 IP 主要通过自定义中间件(Middleware)实现。

方式一:直接在请求中指定

# 在 Request 里指定 meta 代理
yield scrapy.Request(
    url,
    meta={'proxy': 'http://用户名:***@IP:端口'},
    callback=self.parse,
)

方式二:中间件统一代理(推荐)

在 middlewares.py 中定义代理中间件,所有请求自动走代理:

class ProxyMiddleware:
    def process_request(self, request, spider):
        request.meta['proxy'] = 'http://用户名:***@IP:端口'

# 在 settings.py 启用
DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.ProxyMiddleware': 543,
}

轮换 IP 池

import random

IP_POOL = ["ip1:端口", "ip2:端口", "ip3:端口"]

class ProxyMiddleware:
    def process_request(self, request, spider):
        ip = random.choice(IP_POOL)
        request.meta['proxy'] = f'http://用户名:***@{ip}'
配合 API 提取动态获取 IP,可实现真正意义的「无限 IP 池」轮换。