如何分析网站日志中百度蜘蛛的抓取频次?
学完这篇,你能从网站日志里筛出百度蜘蛛的访问记录,并算出它每天、每个时段抓了多少次页面。下面按步骤来。
第一步:拿到日志文件,确认格式
这一步要做什么:找到服务器上的访问日志,确认它长什么样。
常见位置(以 Nginx 为例):/www/wwwlogs/ 或 /var/log/nginx/,文件名通常是 access.log、域名.log。Apache 在 /var/log/httpd/ 或 /var/log/apache2/。
打开看一眼:
tail -n 5 /www/wwwlogs/example.com.log
典型一行长这样:
66.249.66.1 - - [10/Oct/2024:08:12:33 +0800] "GET /post/123.html HTTP/1.1" 200 5120 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
末尾引号里是 User-Agent,百度蜘蛛的标识就是 Baiduspider。
注意:如果日志被压缩成了
.gz,先用zcat或者gunzip解开,否则下面的命令读不到内容。
第二步:筛出百度蜘蛛的记录
这一步要做什么:从全部日志里只保留百度蜘蛛的行,得到一份干净的数据。
grep -i "Baiduspider" /www/wwwlogs/example.com.log > baidu.log
wc -l baidu.log
wc -l 输出的数字就是日志覆盖时间内百度蜘蛛的总抓取次数。
注意:一定要加
-i忽略大小写。有些日志里会写成baiduspider,不加参数会漏掉。
如果日志有多个(比如按天切割),一次性合并:
grep -ih "Baiduspider" /www/wwwlogs/example.com.log.* > baidu.log
第三步:统计每天的抓取频次
这一步要做什么:按日期分组,看每天的抓取量变化。
日志日期格式是 10/Oct/2024,用 awk 取第 4 列并按天汇总:
awk -F'[:[]' '{print $3}' baidu.log | sort | uniq -c
或者更直观地按 日/月/年 取:
grep -o '\[[0-9]*/[A-Za-z]*/[0-9]*' baidu.log | sort | uniq -c
输出形如:
1240 [10/Oct/2024
980 [11/Oct/2024
315 [12/Oct/2024
数字就是当天抓取次数。把这几个数按日期排好,就是一条抓取趋势线。
第四步:看每个小时的分布
这一步要做什么:找出百度蜘蛛集中在哪些时段来抓。
日志时间格式是 08:12:33,取小时部分:
grep -o ':[0-9][0-9]:[0-9][0-9]' baidu.log | cut -c2-3 | sort | uniq -c
输出就是 00 到 23 点各自的抓取次数。凌晨某几个点特别高、白天很低,说明抓取时间集中;全天都有分布,说明抓取比较自然。
第五步:区分不同版本的百度蜘蛛
这一步要做什么:把 PC 蜘蛛和移动蜘蛛分开统计,因为它们抓的页面不一样。
grep -c "Baiduspider/2.0" baidu.log
# 移动蜘蛛
grep -c "Baiduspider" baidu.log && grep -c "Mobile" baidu.log
更准确的写法是分别匹配特征串:
grep -ic "baiduspider/2.0" baidu.log # PC
grep -ic "baiduspider-render" baidu.log # 渲染蜘蛛
grep -ic "baiduspider-mobile" baidu.log # 移动蜘蛛
第六步:统计抓了哪些页面、抓得最多的是哪些
这一步要做什么:把 URL 提取出来排序,看蜘蛛重点抓了什么。
awk '{print $7}' baidu.log | sort | uniq -c | sort -rn | head -20
第 7 列是请求路径。sort -rn 从多到少排,前 20 条就是你站内被抓取最频繁的页面。
同时可以看抓取状态码分布:
awk '{print $9}' baidu.log | sort | uniq -c | sort -rn
如果 404、503 数量很大,说明蜘蛛在撞死链或者服务器在拒绝它。
注意:
304是正常的「没修改」,别当成错误;200和304应占绝大多数。
第七步:判断抓取频次是否正常
这一步要做什么:拿着前面的数字,判断百度对你的站是真抓还是假抓。
几个参考标准:
- 新站或小站:每天几十到几百次属正常。
- 内容站、权重中等:每天几千次。
- 抓取频次连续几天掉到 0,要检查 robots.txt、服务器是否封了百度 IP、是否被降权。
- 抓取量突然翻好几倍但页面不收录,可能是蜘蛛在爬无用参数页,要在 robots.txt 或 URL 规则里挡掉。
注意:单看一天的数字没意义,至少连续看 7 天,再做对比。
小结
- 用
grep -i "Baiduspider"先筛出蜘蛛记录,-i不能省。 - 按天统计用
uniq -c,按小时统计取时间字段的小时位。 - 分清 PC、移动、渲染三类蜘蛛,别混在一起算。
- 用
awk '{print $7}'看被抓页面排行,用第 9 列看状态码分布。 - 判断正常与否要看 7 天趋势,同时排除 404 和封 IP 的干扰。
原文链接:https://www.gj0.com/thread-1367.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。