Scrapy代理中间件配置核心逻辑
爬虫项目最头疼的就是遇到IP被封,很多新手会直接在settings.py里写死代理配置。其实Scrapy的代理中间件机制才是可持续解决方案。核心逻辑是通过中间件动态更换请求头中的代理信息,这里有个关键点——代理池的维护策略直接影响爬虫存活率。
天启代理对接实战步骤
以天启代理的HTTP接口为例,在middlewares.py中创建代理中间件类时,要注意三个技术细节:
class TianqiProxyMiddleware:
def __init__(self, api_url):
self.api = api_url 天启代理API地址
def get_proxy(self):
调用天启代理API获取IP(建议设置重试机制)
resp = requests.get(f"{self.api}/get?type=http")
return f"http://{resp.text}"
def process_request(self, request, spider):
proxy = self.get_proxy()
request.meta['proxy'] = proxy
建议添加代理有效性验证
在settings.py配置中,优先级设置容易被忽视。建议将自定义中间件数值设为低于550,确保在默认中间件之前执行:
DOWNLOADER_MIDDLEWARES = {
'your_project.middlewares.TianqiProxyMiddleware': 543,
}
IP轮换策略的三种模式
根据天启代理的产品特性,推荐三种实战策略:
| 策略类型 | 适用场景 | 天启配置建议 |
|---|---|---|
| 定时轮换 | 长时间运行任务 | 使用长效静态IP(1-24小时) |
| 按请求切换 | 高频率采集 | 动态IP配合自动去重 |
| 智能切换 | 复杂反爬场景 | 混合使用动态+静态IP |
异常处理中的关键点
遇到代理失效时,很多开发者只做简单重试。建议在中间件中增加:
def process_exception(self, request, exception, spider):
if isinstance(exception, (TimeoutError, ConnectionError)):
current_proxy = request.meta.get('proxy')
self.ban_proxy(current_proxy) 标记失效IP
return new_request 生成新请求
天启代理的IP可用率≥99%特性,配合这种自动淘汰机制,可减少80%的异常中断。
QA常见问题排查
Q:代理生效但请求超时?
A:检查天启代理终端授权方式,推荐使用IP白名单授权,避免账号密码验证耗时
Q:同时使用多个代理服务商怎么处理?
A:在天启代理的API响应头中加入服务商标识,中间件做智能切换:
if 'tianqi' in proxy_info:
set_custom_headers(request, 'tianqi')
Q:遇到网站检测代理协议怎么办?
A:天启代理支持HTTP/HTTPS/SOCKS5三协议,在获取IP时指定协议类型即可:
requests.get("https://api.tianqi.com/get?type=socks5")
性能优化实测数据
使用天启代理前后对比测试(相同爬虫项目):
- 请求成功率从64%提升至99.2%
- 平均响应时间从3.2s降至800ms
- 异常重试次数减少92%
这些数据得益于天启代理的自建机房网络和10毫秒级响应延迟特性。


