
搞爬虫必备的代理池搭建指南
搞爬虫的兄弟们应该都懂,目标网站的反爬机制就像打地鼠游戏。今天教大家用ipipgo的代理IP池来武装爬虫,亲测能减少80%的封号概率。咱们分两个流派来说:Scrapy老司机和Requests新手村。
Scrapy老司机的改造方案
在middlewares.py里动点手脚就行,这里有个实战配置模板:
class ProxyMiddleware(object):
def __init__(self):
self.proxy_api = "http://ipipgo.com/api/get?type=dynamic&count=10"
def process_request(self, request, spider):
每5分钟更新一次IP池
if not hasattr(spider, 'proxy_pool') or time.time() - spider.proxy_time > 300:
spider.proxy_pool = requests.get(self.proxy_api).json()['data']
spider.proxy_time = time.time()
随机选个幸运IP
proxy = random.choice(spider.proxy_pool)
request.meta['proxy'] = f"http://{proxy['ip']}:{proxy['port']}"
记得在settings里启用这个中间件!
关键点来了:建议把IP有效期设为3-5分钟,ipipgo的动态住宅套餐支持自定义时效,刚好匹配这个需求。实测用城市级定位功能,能有效降低异地登录风控。
Requests党的花式操作
单线程选手看这里,教你个懒人轮换法:
from itertools import cycle
def get_proxies():
直接从ipipgo后台生成API链接
return [f"{ip}:{port}" for ip in requests.get('ipipgo后台链接').json()]
proxy_pool = cycle(get_proxies())
while True:
try:
current_proxy = next(proxy_pool)
res = requests.get(url, proxies={
"http": current_proxy,
"https": current_proxy
}, timeout=10)
break
except:
print(f"{current_proxy}扑街了,换下一个!")
记得在异常处理里加个重试机制,ipipgo的静态住宅IP适合需要长会话的场景,比如模拟登录后的数据抓取。
避坑指南(QA环节)
Q:代理IP用着用着就失效咋整?
A:先检查套餐类型,动态住宅默认1分钟时效。建议在代码里加个存活检测,超过30秒没响应自动切换。ipipgo的企业版套餐支持延长时效到30分钟
Q:同时开多个爬虫会抢IP吗?
A:用账号体系做隔离,ipipgo后台可以创建子账户,给每个爬虫分配独立密钥,这样就不会互相挤占了
Q:遇到验证码轰炸怎么办?
A:两个方案:1)切换静态住宅IP 2)在请求头里加设备指纹。ipipgo的TikTok解决方案里的设备模拟模块可以借鉴
该选哪个套餐?
根据业务场景对号入座:
| 场景 | 推荐套餐 | 优势 |
|---|---|---|
| 常规数据采集 | 动态住宅(标准) | 0.5元/GB,自动轮换 |
| 长期监控任务 | 静态住宅 | 固定IP可用7天 |
| 企业级爬虫 | 动态住宅(企业) | 独享IP池+定制协议 |
最近发现个小技巧:在ipipgo后台设置协议分流,把HTTP和HTTPS请求分到不同IP池,能提升20%左右的采集速度。特别是搞电商价格监控的时候,亲测有效!
最后提醒下兄弟们,别在免费代理上浪费时间。之前测试过某宝买的廉价代理,10个里有8个都是黑名单IP,还不如用ipipgo的新人试用包,反正前2GB不要钱。

