如何通过日志看蜘蛛的抓取时间分布?
学完这篇你能得到一张按小时统计的蜘蛛抓取次数分布表,知道百度、Google、必应等爬虫在一天中哪些时段来、是否集中或异常。
第一步:确认日志位置和蜘蛛 UA
这一步要找到网站访问日志,并确定要统计的爬虫关键词,做完后你会知道日志路径和过滤词。
宝塔 Linux 面板 8.0.3 的入口是:左侧菜单「网站」> 右侧选择站点 > 顶部标签「日志」>「访问日志」。
日志文件通常在:
/www/wwwlogs/example.com.log
常见蜘蛛 UA 关键词:
Baiduspider
Googlebot
bingbot
YisouSpider
Sogou web spider
注意:如果开启了 CDN,源站日志可能看不到真实蜘蛛 UA,需要去 CDN 控制台下载日志。例如腾讯云 CDN 控制台 >「统计分析」>「日志下载」> 选择日期 >「下载原始日志」。
第二步:过滤蜘蛛访问并查看原始记录
这一步要从日志中筛出蜘蛛请求,做完后你能看到包含时间和 UA 的原始日志行。
先查看最近 100 条里的蜘蛛记录:
tail -n 100 /www/wwwlogs/example.com.log | grep -E "Baiduspider|Googlebot|bingbot"
Nginx 默认 combined 日志格式类似:
123.45.67.89 - - [24/Jul/2024:03:15:22 +0800] "GET /post.html HTTP/1.1" 200 1024 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0)"
其中 [24/Jul/2024:03:15:22 +0800] 就是访问时间。
注意:如果日志按天切割,例如
example.com.log.2024-07-23,需要先合并或逐个文件统计。
第三步:按小时统计抓取次数
这一步要提取每条蜘蛛日志的小时,做完后你会得到“小时 + 次数”的分布结果。
执行:
grep -E "Baiduspider|Googlebot|bingbot" /www/wwwlogs/example.com.log | awk -F'[' '{split($2,a,":"); print a[2]}' | sort | uniq -c | sort -k2,2
输出类似:
12 00
35 01
58 02
71 03
9 04
表示当天 0 点到 4 点蜘蛛分别抓取了 12、35、58、71、9 次。
如果只想看某一天:
grep -E "Baiduspider|Googlebot|bingbot" /www/wwwlogs/example.com.log | grep "24/Jul/2024" | awk -F'[' '{split($2,a,":"); print a[2]}' | sort | uniq -c | sort -k2,2
第四步:按蜘蛛类型分别统计
这一步要把百度、Google、必应分开看,做完后你能知道每种蜘蛛的时间分布。
执行:
for bot in Baiduspider Googlebot bingbot; do
echo "=== $bot ==="
grep "$bot" /www/wwwlogs/example.com.log | awk -F'[' '{split($2,a,":"); print a[2]}' | sort | uniq -c
done
如果某类蜘蛛数量明显集中在凌晨 2 点到 5 点,通常说明搜索引擎在该时段调度抓取。
注意:UA 可以被伪造,日志统计只能作为近似参考,不能当成绝对准确的爬虫来源。
第五步:导出成 CSV 或图表
这一步要把统计结果变成表格或网页,做完后你可以用 Excel 或浏览器查看趋势。
导出 CSV:
grep -E "Baiduspider|Googlebot|bingbot" /www/wwwlogs/example.com.log | awk -F'[' '{split($2,a,":"); print a[2]}' | sort | uniq -c | awk '{print $2","$1}' > spider_hours.csv
文件 spider_hours.csv 有两列:小时、次数。用 Excel 打开后选中两列,插入折线图即可。
如果想生成网页报表,可在宝塔面板 8.0.3 中:「软件商店」> 搜索「GoAccess」> 安装版本 1.9.4,然后在服务器终端执行:
goaccess -f /www/wwwlogs/example.com.log --agent-filter="Baiduspider|Googlebot|bingbot" --html-report=/www/wwwroot/example.com/spider-report.html
浏览器访问:
https://example.com/spider-report.html
在 GoAccess 1.9.4 的 HTML 报表顶部找到「Time Distribution」,即可看到小时分布图。
注意:日志时间可能是 UTC 时间,与北京时间相差 8 小时。宝塔默认日志通常使用服务器本地时间,但新站点要先确认时区。
小结
- 先看日志路径:宝塔 8.0.3 在「网站 > 日志 > 访问日志」。
- 用
grep -E "Baiduspider|Googlebot|bingbot"过滤蜘蛛。 - 用
awk提取[24/Jul/2024:03:15:22]中的小时。 - 用
sort | uniq -c统计每个小时次数。 - 导出 CSV 可画趋势图,开启 CDN 时要下载 CDN 日志而不是只看源站日志。
原文链接:https://www.gj0.com/thread-1633.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。