<h1>ip代理库自动去重与更新策略公开:免费代理ip池长期可用的秘密</h1>
<h2>为什么你的代理IP池越跑越少?90%的人死在“重复”和“过期”</h2>
很多刚入坑爬虫的小伙伴,把网上抓来的免费代理ip一股脑塞进Redis,结果第二天一看,60%超时,30%连不上,剩下10%还是同一家IDC的重复段,封IP直接团灭。问题就出在:没有去重、没有定时更新、没有健康度评分。今天把我自己用了三年的“IP代理库自动去重与更新策略”公开,照着抄,你也能把代理池做成“日更10万、重复率<3%”的永动机。
<h2>核心思路:把代理IP当“生鲜”,保质期只有300秒</h2>
代理IP不是石头,今天能跑,明天就废。我的做法是给每条IP打“三分钟保质期”:
1) 爬下来先不急着入库,放进“待检队列”;
2) 开50个协程,每IP并发测一次目标网站(不是测百度,而是测你真正要爬的那个),响应<2秒算存活;
3) 存活立刻写Redis,key用ip:port
的md5,过期时间300秒,天然去重;
4) 300秒后Redis自动淘汰,避免“僵尸IP”占坑。
一句话:让Redis帮你“过期即焚”,省得写定时任务删数据。
<h2>去重算法:URL去重那一套别照搬,IP段+端口+协议三维判重</h2>
很多人直接用字符串哈希,结果115.239.123.4:8080
和115.239.123.5:8080
被当成两条,其实整段C类都是同一家机房,封就封一片。我把IP拆成四段,掩码24位,组合成115.239.123.0_8080_http
当唯一键,24小时内同一C段+端口+协议只保留最快的一条,重复率直接砍到3%以下。再狠一点,可以上GeoIP,把“中国-浙江-杭州-阿里云”直接打标签,同区域只留两条做冗余,其余扔掉,省钱省内存。
<h2>更新策略:让“免费代理网站”变成你的打工仔</h2>
免费代理网站最怕反爬,我用“三班倒”:
上午爬“快代理”,下午爬“89免费”,夜里爬“ProxyList+”,每个源配不同User-Agent+10秒随机延迟,一天能薅2万条不重复。
重点:别一口气薅完,写个“增量时间戳”,只抓“最新发布”那一页,RSS、XML、JSON端点都行,减少对方服务器压力,自己也少被ban。
抓到的新IP立刻丢进“待检队列”,走完“三分钟保质期”流程,才算真正入库。整套流程用Airflow画DAG,失败自动重跑,手机收到钉钉告警,安心睡大觉。
<h2>健康度评分:给IP打“信用分”,低于60直接踢</h2>
光去重不够,还要“赛马”。我给每条IP建个哈希表:
- 连续成功+1分,连续失败-3分;
- 响应>3秒-1分;
- 被目标网站返回403-5分。
初始70分,低于60立即删除,并写进“黑名单”Redis Set,7天内不再采信。高分IP优先弹出,爬虫端不用自己重试,速度嗖嗖的。
顺带把“高匿”“普匿”“透明”标签也一起打,业务需要高匿直接过滤,省得在代码里if else
写一堆。
<h2>一键部署:Docker+Redis+Python,15分钟跑起来</h2>
我把整套代码压成3个容器:
1) proxy-fetcher
:负责爬、解析、入待检;
2) proxy-tester
:负责并发测、打分、写Redis;
3) proxy-api
:Flask裸接口,/get?country=CN&anonymity=high
随机返回一条高匿,支持https+jsonp,前端也能用。 docker-compose up -d
一把梭,2核4G的小水管日更10万不卡。配置文件里把Redis密码、目标测速URL、扣分阈值全抽出来,改两行就能复用到任何项目。
<h2>常见坑Top3:谁踩谁哭</h2>
1) 只测百度不测目标站:百度能通不代表你的电商站能通,测错等于白干;
2) 把“透明代理”当好代理:对方一眼就看到你家真实IP,封你没商量;
3) 忘了给Redis设最大内存:代理池一膨胀,直接把内存干爆,整站503。
把这三坑避开,你已经跑赢80%的同行。
<h2>写在最后</h2>
免费代理IP就像公共厕所,不挑就只能捏着鼻子用。上面这套“自动去重+更新+评分”组合拳,我亲测三年,从日采1万到日采10万,重复率稳在3%以内,爬虫成功率从60%飙到92%。代码都公开了,拿去改改就能商用。
采购代理IP请添加微信客户经理:x31471626
评论0