📂 所属阶段:第三阶段 — 攻防演练(中间件与反爬篇)
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
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)
代理策略: 1. 免费代理:不稳定 2. 付费代理:稳定但贵 3. 自建代理:最稳定 最佳实践: - 使用代理池 - 自动轮换 - 失败重试
💡 记住:代理是大规模爬虫的必需品。没有代理,你的 IP 会被秒封。
🔗 扩展阅读