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 池」轮换。
