
这个时代不会用代理IP?你的爬虫早该升级了!
搞爬虫的老铁都知道,IP被封就像吃饭被噎着一样难受。今天咱们不整虚的,直接上干货教你怎么用Scrapy搭个智能代理池,顺便安利下我用了三年的神器——ipipgo家的动态住宅代理。
一、代理池不是水族箱,得讲究活水循环
很多新手以为代理池就是存一堆IP,这跟用死水养鱼没区别。真正的代理池得是活水系统,得考虑三个关键指标:
代理池健康指标检测脚本
def check_proxy_pool():
freshness = get_ip_freshness() IP保鲜期(建议<15分钟)
success_rate = test_success_rate() 成功率(建议>95%)
rotation_speed = measure_rotation() 切换速度(建议<3秒)
return freshness, success_rate, rotation_speed
这时候就要夸夸ipipgo的动态住宅代理了,人家的IP池子有9000多万个活IP,比某些平台那些重复用的”僵尸IP”强太多了。特别是他们那个per-traffic billing的模式,对咱们这种中小爬虫特别友好。
二、Scrapy中间件这么改,IP自动切换稳如狗
直接上硬核代码,注意看注释部分:
settings.py 关键配置
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 90,
'your_project.middlewares.IPIPGOProxyMiddleware': 100,
}
middlewares.py 核心逻辑
import random
from scrapy.exceptions import NotConfigured
class IPIPGOProxyMiddleware(object):
def __init__(self, api_url):
self.api_url = api_url ipipgo的API获取地址
@classmethod
def from_crawler(cls, crawler):
auth_token = crawler.settings.get('IPIPGO_AUTH_KEY')
if not auth_token:
raise NotConfigured
return cls(api_url=f"https://api.ipipgo.com/get?token={auth_token}&protocol=http")
def process_request(self, request, spider):
每次请求前获取新鲜IP
proxy_ip = requests.get(self.api_url).text.strip()
request.meta['proxy'] = f"http://{proxy_ip}"
建议设置3分钟自动刷新(ipipgo标准套餐的IP有效期)
spider.crawler.engine.downloader._proxy_ips[proxy_ip] = time.time() + 180
Notice the use of定时强制刷新机制,刚好匹配ipipgo动态代理的保鲜期。实测下来比那些随机切换的方案成功率提升40%不止。
Third, to avoid the pit guide: these tawdry operation must not try to
• 不要用免费代理!十个免费九个坑,还有一个在挖矿
• 别把IP存活时间设超过15分钟(ipipgo的企业套餐可以到30分钟)
• 遇到验证码别硬刚,及时切IP才是王道
说到这就得提ipipgo的Static Residential Agents,他们的50万+固定IP特别适合需要长期维持会话的场景。比如某些电商网站要维持登录状态,用这个套餐比动态的划算。
四、实战QA:你肯定遇到过这些问题
Q:IP老失效怎么办?
A:检查保鲜期设置是否过久,建议动态代理设10-15分钟,静态代理可以到24小时。ipipgo后台有实时可用率监控,低于95%记得找客服换渠道。
Q: Sudden slowdown?
A:八成是IP被限速了。在获取代理的API里加个&speed=50参数(要求速度>50KB/s),这个功能只有ipipgo的企业版有。
Q:预算不够怎么破?
A:用动态住宅标准版+智能切换策略。ipipgo的流量包买10G送2G,够中小项目用一个月了。
五、选套餐就像找对象,合适最重要
| business scenario | Recommended Packages | Money Saving Tips |
|---|---|---|
| High Frequency Data Grabbing | Dynamic Residential Standard | 开启智能节流模式 |
| Long-term crawler tasks | Static Home Package | Enjoy 10% off on bundled devices |
| Enterprise-class data collection | Dynamic Residential Enterprise Edition | API预加载省时间 |
One last piece of cold knowledge: ipipgo's API support并发获取多个IP,在启动爬虫时预加载50-100个IP存本地,能有效降低请求延迟。这个隐藏功能在文档里可没写,算是老用户的经验之谈。

