抓取公开数据时,总遇到“IP被封”、“请求被拦截”、“验证码弹窗”?
这篇文章为你拆解最常见的反爬策略,并提供一套可落地的对抗方案。
无论你是做市场调研、跨境电商竞品分析,还是训练AI模型,爬虫都是一项基础能力。但如今,99%的网站都部署了反爬机制。直接用一个IP、一套请求头去抓取,基本坚持不了几分钟。
那么,真正的爬虫工程师是如何绕过这些限制的?本文将围绕 IP代理、请求伪装、行为模拟、指纹规避 四大方向,给出6个核心技巧。
一、先搞懂网站是怎么发现你的
要突破反爬,先得知道它在查什么。常见的反爬检测维度包括:
| 检测维度 | 具体手段 |
|---|---|
| IP行为 | 同一IP在短时间内请求次数过多、请求频率异常 |
| 请求头 | 缺失或错误的 User-Agent、Referer、Accept-Language |
| 浏览器指纹 | 检测 navigator.webdriver、Canvas指纹、WebGL、时区等 |
| 验证码 | 弹出滑块、点选或字符验证码 |
| 动态Token | 页面携带的 _token、sign 等参数需要从JS计算得出 |
| JS执行能力 | 检测是否真正执行了JavaScript(如通过 document.cookie 校验) |
理解了这些,我们的反制手段就有了明确方向。
二、核心技巧1:IP轮换与代理池
反爬最直接的手段就是封IP。 因此,突破反爬的第一道防线就是使用多IP轮换。
常见方案
-
数据中心代理:速度快、便宜,但容易被识别为机房IP,适合对风控要求不高的场景。
-
住宅代理:由真实宽带运营商提供,IP纯净度高,几乎无法被标记为代理,适合电商、社交平台等高风控网站。
-
移动代理:4G/5G IP,动态切换,难度最高,成本也最高。
实战建议
-
建立一个代理IP池,每次请求随机取一个IP,避免单一IP高频访问。
-
控制单IP的请求频率:建议控制在1-3秒/次,并加入随机间隔。
-
对于大规模采集,采用“IP+账号”轮换策略,进一步分散风险。
✅ 效果:解决80%的基础反爬,让网站无法轻易封禁你。
三、核心技巧2:伪造真实的请求头
很多新手只改 User-Agent,以为万事大吉。实际上,网站会检查一组请求头的一致性。
需要伪造的关键字段
text
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... Accept: text/html,application/xhtml+xml,... Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Accept-Encoding: gzip, deflate, br Referer: https://www.google.com/ Sec-Ch-Ua: "Not_A Brand";v="99", "Google Chrome";v="109" Sec-Ch-Ua-Mobile: ?0 Sec-Ch-Ua-Platform: "Windows" Connection: keep-alive
高级技巧
-
从真实浏览器复制完整的请求头,动态带入爬虫。
-
使用
fake-useragent库随机选择UA。 -
保持
Referer与请求路径的逻辑关系(例如访问商品详情页前,先访问列表页)。
✅ 效果:绕过基于请求头特征的初级风控。
四、核心技巧3:模拟人类操作节奏
机器请求的特点是快、准、稳定,而人类操作是慢、有停顿、有随机性。
如何模拟?
-
随机延时:每次请求后
sleep(random.uniform(0.5, 2.0))秒,避免固定间隔。 -
模拟鼠标移动与滚动:使用
selenium或playwright时,加入随机的鼠标轨迹和滚动动作。 -
行为序列:不要直接请求目标URL,先访问首页 → 搜索关键词 → 点击结果 → 再采集详情。这一过程越像真实用户,越不容易被风控。
✅ 效果:绕过基于访问频率和路径异常的风控模型。
五、核心技巧4:应对验证码
验证码是反爬的最后一道防线。完全绕过非常困难,但可以通过以下方式降低影响:
常见策略
| 验证码类型 | 应对方式 |
|---|---|
| 简单数字/字母 | OCR(Tesseract、ddddocr) |
| 滑块验证码 | 轨迹模拟(如使用 OpenCV 计算缺口位置,再模拟人类拖动曲线) |
| 点选/旋转验证码 | 第三方打码平台(超级鹰、2Captcha) |
| 无感验证(如极验) | 高成本方案:付费识别API或使用浏览器环境复用 |
关键原则
-
尽量不触发验证码:比“破解验证码”更有效的是通过IP轮换+行为模拟,让验证码根本不弹出来。
-
触发后切换IP:一旦某个IP触发验证码,立即将其加入黑名单,换下一个IP重试。
✅ 效果:在可接受成本下,处理低频验证码问题。
六、核心技巧5:绕过浏览器指纹检测
当你使用 selenium 或 playwright 时,网站可以通过JavaScript检测出你正在被自动化工具控制。典型特征包括:
-
navigator.webdriver值为true -
window.chrome对象缺失某些属性 -
插件、语言、时区与IP地理位置不匹配
规避方法
-
使用 undetected-chromedriver:一个专门绕过指纹检测的 selenium 分支。
-
注入JS代码:在页面加载前,覆盖
navigator.webdriver等属性。 -
使用指纹浏览器:如 AdsPower、Multilogin,配合真实住宅IP,完全模拟独立设备。
对于高难度目标(如TikTok、Facebook、Amazon),指纹浏览器 + 住宅代理是最稳定方案。
✅ 效果:突破基于无头浏览器检测的高级反爬。
七、核心技巧6:动态Token与JS逆向
部分网站每次请求都会携带动态计算出的Token(如 sign、_token),如果直接请求接口会返回403。
应对方案
-
方案A(低难度):直接使用浏览器自动化(如playwright)获取渲染后的页面,绕过Token校验。
-
方案B(中难度):定位Token生成逻辑(常见于JS文件中),用Python或Node.js复现加密算法。
-
方案C(高难度):使用
pyexecjs或node子进程直接调用原JS生成Token。
⚠️ 注意:逆向有法律风险,请确保爬取的是公开数据,并遵守网站的robots.txt。
✅ 效果:攻克依赖请求签名的反爬体系。
总结:一套通用的反爬突破流程
当你面对一个新目标时,可以按以下顺序尝试:
-
基础请求:单IP + 简单UA → 大概率被封。
-
IP轮换 + 完整请求头 → 大部分基础反爬可过。
-
加入随机延时 & 行为路径模拟 → 绕过频率与轨迹检测。
-
若触发验证码 → 切换到纯净住宅IP,降低请求频率。
-
若被检测为自动化浏览器 → 使用 undetected-chromedriver 或指纹浏览器。
-
若接口有动态Token → 先尝试渲染方式,再考虑逆向。
最后一条忠告:反爬与爬虫是一场持续的攻防战。没有一劳永逸的方案,但有可靠的基础设施(高质量代理IP + 指纹浏览器)会让你事半功倍。
如果你正在寻找稳定的国内代理IP,不妨试试我们提供的IP服务——国内400+地区,支持城市级定位,请求成功率99.5%以上,帮助你的爬虫稳定运行,不再被封。👉 点击了解详情(通过链接注册会送10个币免费测试https://kip.ipzan.com
转载自CSDN-专业IT技术社区



