想知道百度蜘蛛每天来多少次、都在抓哪些目录,多数人的第一反应是去搜索资源平台看抓取频次曲线。那条曲线只有全站总量,拆不出目录维度,也看不出哪个页面被抓爆、哪个页面从没被碰过。这些细颗粒度的答案,其实全躺在 access.log 里,一把 awk 就能挖出来。
Nginx 默认的 combined 格式里,第 7 个字段是请求 URL,第 9 个字段是返回码,第 4 个字段是带时区的时间。先用 grep 把蜘蛛 UA 过滤出来,再用 awk 按不同维度聚合,三五个命令行就凑齐一套蜘蛛行为报表,不用装任何东西。
# 百度蜘蛛总抓取次数
grep -c "Baiduspider" /var/log/nginx/access.log
# 蜘蛛抓取的目录分布,按次数倒序
grep "Baiduspider" /var/log/nginx/access.log \
| awk '{print $7}' \
| awk -F/ '{print "/"$2}' \
| sort | uniq -c | sort -rn | head -20
目录分布能立刻暴露两件事:抓取资源集中在哪,以及哪些目录在空耗抓取。列表页和内容页占大头是健康的;如果 /tag、/search 这类程序生成的路径占了两三成,抓取预算就在被浪费——治理思路留到抓取预算那篇细说。接着看返回码分布和时间曲线。
# 蜘蛛抓取的返回码分布
grep "Baiduspider" /var/log/nginx/access.log \
| awk '{print $9}' | sort | uniq -c | sort -rn
# 每小时抓取量曲线($4 形如 [03/Sep/2026:14:07,
# 从第 14 位起截 2 位即小时数)
grep "Baiduspider" /var/log/nginx/access.log \
| awk '{print substr($4,14,2)":00"}' \
| sort | uniq -c
# 被抓最多的 10 个页面
grep "Baiduspider" /var/log/nginx/access.log \
| awk '{print $7}' | sort | uniq -c | sort -rn | head -10
时间曲线有个实战价值:蜘蛛通常凌晨抓得勤,如果你的站恰好那个时段做备份或跑批任务,服务器负载一高,蜘蛛的抓取意愿会跟着受影响。两条曲线叠着看,错峰安排任务就能避开。想聚合谷歌蜘蛛,把 grep 的关键词换成 Googlebot 即可,统计逻辑完全一样。
# 百度+谷歌一起统计,输出一份完整小结
for spider in Baiduspider Googlebot; do
echo "== $spider =="
grep "$spider" /var/log/nginx/access.log \
| awk '{code[$9]++} END {for (c in code) print c, code[c]}' \
| sort -rn
done
验证口径很简单:grep -c 出来的总次数,量级应该和搜索资源平台抓取频次工具里的日抓取量对得上。对不上先查两件事——日志切割有没有漏、平台数据有没有延迟。
两个容易翻车的细节提前交代:一是 UA 过滤只认 Baiduspider 字符串,冒充蜘蛛的假爬虫会混进统计里,严格场景可以先反查 IP 归属再算数,蜘蛛真伪验证那篇讲过具体方法;二是目录聚合用 / 做分隔符取第二段,对带参数的长 URL 同样有效,但嵌套更深的目录结构要按实际层级调整取段位置,先 head 看几行原始记录再定。
awk 报表的短板是没有历史趋势,所以它适合做即时诊断,趋势要靠后面的 Python 日报脚本来补。
相关阅读:本篇属于《SEO 自动化总清单:日、周、月、季各该跑什么》日志组,轻量 awk 报表配合总纲里的例行节奏,蜘蛛数据天天有,不用等出问题再翻日志。
申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!


