直接看user-agent字段是识别爬虫最常用有效的起点,可通过awk、grep正则提取,结合bot/spider等关键词匹配典型爬虫ua,并需叠加访问频次、路径规律、请求头缺失等行为验证,辅以goaccess或elk等工具提升分析效率。

直接看 User-Agent 字段是识别爬虫最常用也最有效的起点。它不像 IP 或访问频率那样需要统计,只要字符串里带明确标识,基本就能确认身份。
抓取日志中 User-Agent 字段
Nginx 默认日志格式中,User-Agent 通常位于每行的第 6 个字段(以空格分隔),但实际位置取决于 log_format 配置。稳妥做法是用正则提取引号内的完整 UA 字符串:
- 快速提取全部 UA:
awk -F'"' '{print $6}' /var/log/nginx/access.log | head -20 - 去重并统计高频 UA:
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -15 - 避免因日志格式变动出错,推荐用
grep -oP 'User-Agent[^"]*"[^"]*"' /var/log/nginx/access.log | cut -d'"' -f3
识别典型爬虫 UA 字符串
合法搜索引擎和主流平台爬虫一般会主动声明身份,UA 中包含可辨识关键词:
-
百度:含
baiduspider,如Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) -
谷歌:含
Googlebot,注意区分Googlebot-Image、Googlebot-News等子类 -
Facebook/Meta:含
facebookexternalhit、facebookscraper、meta-externalagent -
通用特征词:匹配
bot、spider、crawler、curl、python-urllib、scrapy、gptbot、bingbot等(大小写不敏感)
结合行为验证是否为真实爬虫
仅靠 UA 不够可靠——有人会伪造,也有真实用户 UA 被误标。需叠加访问行为交叉判断:
- 同一 UA 在 1 分钟内发起超 50 次请求,尤其集中在静态资源或无参数路径,高度可疑
- 大量返回 404 的 UA,且路径呈规律性枚举(如 /wp-admin/、/.git/config、/api/v1/users),大概率是扫描型爬虫
- UA 声称是浏览器(如 Chrome),但请求中缺失常见头字段(
Accept-Language、Referer)、不带 Cookie、或 User-Agent 格式明显异常(如只有python-requests/2.28.1) - 来自已知爬虫 IP 段(如 Facebook 的
31.13.64.0/18、Google 的 ASN 15169)且 UA 匹配,可信度更高
用工具提升分析效率
人工 grep 适合初筛,批量分析建议借助专用工具:
-
GoAccess:运行
goaccess /var/log/nginx/access.log --log-format=COMBINED,进入交互界面后按u查看 UA 统计,支持过滤关键词 - ELK Stack:Logstash 解析 UA 字段后存入 Elasticsearch,Kibana 中可建看板,按 UA 分组 + 状态码 + 响应时间联动分析
-
简单脚本辅助:用 Python +
httpagentparser库解析 UA,自动标注“crawler”、“mobile”、“desktop”,再筛选 crawler 类别做聚合











