代理 IP 池集成:动态代理切换、IP 封禁规避

📂 所属阶段:第三阶段 — 攻防演练(中间件与反爬篇)


1. 代理 Middleware

import random

class ProxyMiddleware:
    PROXIES = [
        'http://proxy1.com:8080',
        'http://proxy2.com:8080',
        'http://proxy3.com:8080',
    ]
    
    def process_request(self, request, spider):
        proxy = random.choice(self.PROXIES)
        request.meta['proxy'] = proxy

2. 代理池管理

import redis

class ProxyPoolMiddleware:
    def __init__(self):
        self.redis = redis.Redis()
    
    def process_request(self, request, spider):
        # 从 Redis 获取代理
        proxy = self.redis.lpop('proxy_pool')
        if proxy:
            request.meta['proxy'] = proxy.decode()
    
    def process_exception(self, request, exception, spider):
        # 代理失败,移除
        proxy = request.meta.get('proxy')
        if proxy:
            self.redis.lpush('bad_proxies', proxy)

3. 小结

代理策略:

1. 免费代理:不稳定
2. 付费代理:稳定但贵
3. 自建代理:最稳定

最佳实践:
- 使用代理池
- 自动轮换
- 失败重试

💡 记住:代理是大规模爬虫的必需品。没有代理,你的 IP 会被秒封。


🔗 扩展阅读