当爬虫遇上反爬:你的Selenium为啥总被「拉黑」?
做数据抓取的兄弟都懂,用Selenium模拟浏览器操作确实能绕过不少基础反爬。但最近两年网站风控越来越狠,你会发现刚跑几分钟,目标网站就给你弹验证码,甚至直接封IP。这时候要是只会改User-Agent,基本等于送人头。
上周有个做电商比价的哥们跟我吐槽,他们团队用Selenium+Python搞竞品监控,结果连续三天IP被封了四十多次。后来我让他试了代理IP轮换方案,现在单机每天稳定抓取8万条数据,关键技巧就在IP池的调度策略。
代理IP不是万能钥匙:90%的人用错了方式
很多人以为在代码里随便加个proxy参数就完事,结果发现代理IP用起来比裸奔还惨。这里有个真实测试数据:同一段Selenium脚本,使用静态代理的成功率只有23%,而动态住宅代理的成功率能达到89%。
天启代理的工程师做过实测,在电商类网站抓取场景中,单个IP连续请求超过15次就会触发风控机制。他们的技术方案里有个骚操作:把代理IP池按地域划分,比如北京节点专门抓华北地区网站,广州节点对应华南站点,这样IP的地理属性更贴近真实用户。
手把手教你给Selenium「易容」
这里分享个实战代码模板,用天启代理的API动态获取IP。注意看注释里的细节处理:
from selenium import webdriver import requests 从天启代理获取动态IP(注意要替换成自己的API密钥) def get_proxy(): resp = requests.get("https://api.tianqidaili.com/getip?type=socks5") return resp.json()['ip:port'] options = webdriver.ChromeOptions() options.add_argument(f'--proxy-server=socks5://{get_proxy()}') 必须加这个参数防止WebRTC泄露真实IP options.add_argument("--disable-webrtc") driver = webdriver.Chrome(options=options) driver.get("https://目标网站.com")
重点来了!很多教程没说的两个坑:
① 记得禁用浏览器定位服务,否则网站能通过HTML5 Geolocation API获取真实位置② 每次新开浏览器实例时清空Cookies,避免用户行为指纹关联
高阶玩家都在用的IP调度策略
这里有个我们团队实测有效的方案表格:
场景类型 | IP切换策略 | 天启代理配置建议 |
---|---|---|
低频抓取(<100次/小时) | 每30分钟更换IP | 使用长效静态IP套餐 |
高频抓取(>1000次/分钟) | 每次请求更换IP | 开启并发API接口+自动去重 |
需要登录态的操作 | 固定IP维持会话 | 选择带身份验证的私有代理 |
常见问题急救包
Q:明明用了代理,为啥还是被封?
A:检查三点:1.浏览器是否漏WebRTC 2.IP池是否有重复使用 3.操作间隔是否太规律
Q:天启代理的响应延迟影响爬虫速度怎么办?
A:他们的自建机房节点延迟≤10ms,如果还觉得慢,建议开启SOCKS5协议+多线程异步请求
Q:遇到Cloudflare验证怎么破?
A:这个不能硬刚,得用真人指纹浏览器+住宅代理。天启代理正在内测的浏览器指纹模拟方案可以关注下
最后说个行业冷知识:现在头部网站的IP画像系统能识别出数据中心代理的特征,这也是为什么推荐用天启代理这种混用运营商线路的服务商。他们那个「IP画像混淆算法」实测能把识别率从78%降到12%,不过具体技术细节属于商业机密了。