Scrapy代理中间件开发实战指南
在数据采集场景中,代理IP的正确使用能有效避免触发目标网站防护机制。本文将以天启代理为例,手把手教你搭建高可用代理中间件。
一、基础配置:三步接入代理IP
在Scrapy项目的middlewares.py文件中创建代理中间件类:
class TianqiProxyMiddleware: def process_request(self, request, spider): request.meta['proxy'] = 'http://你的天启代理账号:密码@gateway.tianqidaili.com:端口'
天启代理支持HTTP/HTTPS/SOCKS5三种协议,根据实际场景选择。建议通过API动态获取IP(接口响应时间<1秒),避免手动维护IP列表。
二、高效管理代理池的秘诀
动态代理与静态代理对比:
类型 | 适用场景 | 天启代理方案 |
---|---|---|
动态IP池 | 高频采集任务 | 按量付费+失败自动切换 |
静态长效IP | 需维持会话状态 | 独享IP+定时验证存活 |
推荐在中间件中加入IP轮换逻辑:
import random def process_request(self, request, spider): ip_list = self.get_ip_from_tianqi_api() 调用天启代理API request.meta['proxy'] = random.choice(ip_list) request.meta['max_retry_times'] = 3 配合重试中间件使用
三、响应延迟优化方案
实测天启代理延迟≤10ms的配置技巧:
- 优先选择同省/同运营商节点(全国200+城市覆盖)
- 设置合理的超时时间:download_timeout建议设为15-20秒
- 启用HTTP压缩:在请求头添加'Accept-Encoding': 'gzip, deflate'
四、异常处理黄金法则
在中间件中捕获以下常见异常:
def process_exception(self, request, exception, spider): if isinstance(exception, (TimeoutError, ConnectionError)): self.mark_ip_invalid(request.meta['proxy']) 标记失效IP return request.replace(dont_filter=True) 自动重试新IP
五、常见问题QA
Q:代理突然失效怎么办?
A:建议接入天启代理的IP存活检测接口,在请求前主动验证IP可用性。他们的API支持批量检测,每秒可验证上百个IP。
Q:如何提升大规模采集效率?
A:采用分域代理策略,将不同域名分配到特定IP池。天启代理支持按地域、运营商精准筛选IP,配合CONCURRENT_REQUESTS参数调整并发数。
Q:遇到验证码频发怎么处理?
A:建议组合使用:1)降低单个IP请求频率 2)启用天启代理的高匿IP(自建机房纯净网络)3)设置合理的请求间隔
通过上述方案配合天启代理的高质量IP资源(可用率≥99%),可有效解决90%以上的采集阻断问题。建议先通过免费试用测试具体配置参数,再根据业务量级选择合适方案。