如何判断 User‑Agent 是否爬虫伪造
核心原则:UA 本身可以随意伪造,不能单靠 UA 字符串下结论,要「UA 特征 + 请求行为 + IP 信息 + 指纹」综合判断。 爬虫分两类:
- 诚实爬虫:UA 直接带
Bot/Spider/Crawl,比如GeneralCrawlBot/0.1、YisouSpider,一眼识别。 - 伪装爬虫(恶意):冒充 Chrome、Quark、Safari,完全抄正常浏览器 UA,UA 看不出破绽,必须看行为。
一、先看 UA 字符串本身(初筛)
1)正常真实浏览器 UA 特点
- 完整结构:
Mozilla/5.0 (系统信息) AppleWebKit/xxx (KHTML, like Gecko) 浏览器标识 Safari/xxx - 括号内有真实设备:Android 版本、iPhone OS 版本、Windows NT 版本;
- 版本号逻辑合理,不会出现不存在的浏览器版本;
- 移动端 UA 一定带有
Mobile。
伪造 UA 常见破绽
- 残缺 UA 只有简单名字,缺少标准前缀,例如直接写
Quark、Chrome,没有Mozilla/5.0(...)一大段。 - 内容矛盾(最经典)
- UA 写 Windows 电脑,却带上
Mobile; - 写 iPhone OS 99.0(不存在的系统版本);
- 同时混杂多个浏览器标识,比如同时出现
Chrome+Safari+Quark互相冲突。
- UA 写 Windows 电脑,却带上
- 版本号离谱:浏览器版本号现实还没发布。
- 诚实爬虫伪装成浏览器:UA 里面偷偷残留
bot、crawl、spider关键字。
⚠️重点:UA 看着完全正常,不等于就是真人!90% 恶意爬虫会复制一份 100% 完全正确的浏览器 UA,字符串没有任何漏洞。
二、最重要:分析请求行为(比 UA 可靠得多)
这是区分伪装爬虫最有效的手段,看 Nginx/Apache 日志字段:
- 访问频率
- 真人:单 IP 几秒 / 几十秒访问 1 次,页面之间有时间间隔;
- 爬虫:1 秒十几 / 几十次请求,连续疯狂爬链接,无思考间隔。
- 访问路径模式
- 真人:点击,访问是零散的;经常访问首页、文章页,很少访问不存在的随机地址;
- 爬虫:按数字遍历
/id=1/id=2/id=3,批量遍历全部页面;大量 404 请求。
- 是否请求静态资源(css、js、图片) ✅真实浏览器:访问网页同时自动加载图片、CSS、JS; ❌绝大多数简易爬虫:只请求 HTML 页面,完全不加载图片、css、js,只扒文字。这个特征非常强。
- Cookie 情况
- 真人:会携带、回写 Cookie;
- 简单爬虫:不带 Cookie,或者每次请求 Cookie 完全是空。
- Referer(来源页)
- 真人:有来源页面,从首页跳转到内容页;
- 爬虫:大量请求 Referer 为空。
三、IP 信息校验
- 查询 IP 归属库:
- ✅真实用户:家庭宽带、手机运营商 IP(移动 / 联通电信);
- ⚠️爬虫特征:云服务器 IP(阿里云、腾讯云、AWS、海外云主机)、代理池、机房 IP 段。
只要是云机房 IP,哪怕 UA 是完美的 Chrome,也要高度怀疑爬虫。
四、高级:JS 浏览器指纹(WAF / 反爬)
仅日志做不到,需要网页端 JS 检测:
- 是否执行 JS:很多 httpclient 爬虫不执行 JS;真实浏览器一定会执行 JS。
- 检测:canvas 指纹、webgl、navigator 各个子属性是否互相矛盾;
- 滑块、验证码:伪装爬虫通不过交互校验。
五、快速实操判断流程图(运维直接套用)
- UA 里面有 Bot/Spider/Crawl → 确认爬虫。
- UA 看着正常:
- IP 是云机房 + 不加载图片 css + 请求频率极高 → 伪装爬虫
- IP 是家庭 / 手机宽带,请求带静态资源,访问间隔自然 → 大概率真人。
六、常见误区
❌误区 1:匹配 UA 关键词封禁
Quark、Chrome
会误伤大量真实访客;不要只靠 UA 拉黑。
❌误区 2:UA 看着和浏览器一模一样,就判定是人。
requests、curl 可以直接复制完整 UA,完全看不出问题。
✅正确策略:
UA 做初步筛选,真正拦截依据是 IP + 请求行为(频率、静态资源、访问模式)。
robots.txt 补充
就算爬虫遵守 robots.txt,UA 也可以伪造;robots 只是道德协议,没有强制约束力。
简单示例
日志行 1(爬虫伪造夸克)
IP 来自阿里云,只请求 html,无图片,1 秒 5 次请求,UA 是完整 Quark。→ 伪装爬虫
日志行 2(真实手机用户)
IP 移动手机网,请求 html 同时请求 jpg/css,每个请求间隔数秒。→真人。
如果你有一行真实访问日志,发给我,我可以现场演示一遍完整判断过程。
简单总结判断优先级(从高到低)
行为特征 > IP 归属 > JS 指纹 > User‑Agent 字符串
UA 只是最不可靠的参考。
