為什么日誌里的“蜘蛛”需要核實
任何入口頁只要對外開放,日誌里很快就會冒出大量自称 Baiduspider、Googlebot、bingbot 的請求。這些請求里有一部分确實是搜尋引擎的抓取程序,但也有相当比例是采集器、监控探针、掃描器,甚至只是把 User-Agent 改了個名字的普通脚本。两者在日誌里長得几乎一样,如果不做区分,會带来两個直接問题:一是統計失真,你以為蜘蛛来了几百次,實际可能只有几十次;二是誤封風險,按 UA 一刀切地封禁,可能把真蜘蛛一起挡在门外。
识別蜘蛛的目的並不是“抓住伪装者”,而是让自己的判断有依據。它能帮你確認入口頁是否真的被搜尋引擎發現了,也能在排查抓取異常时先排除掉干扰項。
第一步:用 User-Agent 做初筛
User-Agent 是最容易拿到的线索,但它只能算初筛,不能当结论。原因很简單:UA 字符串可以随意伪造,任何脚本都能把自己寫成 “Mozilla/5.0 (compatible; Googlebot/2.1; ...)” 的样子。
可以這样使用:
- 按 UA 關键字分组統計,先看各個搜尋引擎的請求量級和比例;
- 關注明顯異常的 UA,比如完整复刻但夹杂奇怪後缀,或者版本号明顯過时;
- 把 UA 為空、或寫着常见浏览器标识却频繁抓取的請求單獨归類。
這一步的产出是“嫌疑名單”,而不是“结论名單”。
第二步:核對来源 IP
真正能提高可信度的,是對来源 IP 的核對。主流搜尋引擎都提供官方說明:
- Google:對 Googlebot 的反向 DNS 解析结果應落在 googlebot.com 或 google.com 域下,並且再對该域名做正向解析能回到同一 IP,也就是常说的正向確認反向 DNS;
- 百度:官方會公布蜘蛛 IP 段列表,可以定期比對;
- Bing:同样支持通過反向解析驗證 bingbot 身份;
- 其他搜尋引擎規則類似,通常都能在官方帮助文档里找到說明。
實操上,把日誌里的来源 IP 與官方 IP 段做匹配,比逐條做反向解析更省事,适合日常巡检;反向解析更嚴格,适合在需要確認某個可疑請求时單獨使用。注意 DNS 解析有缓存和超时,批量處理时要记錄失敗項並做重试。
第三步:看請求行為是否像蜘蛛
即使 UA 和 IP 都對得上,也值得再看一眼請求行為,因為某些代理或抓取服務會借用真實蜘蛛的出口环境。
- 請求头是否完整:真蜘蛛一般带 Accept、Accept-Encoding、Referer 等常規字段,既不會整片缺失,也不像浏览器那样堆叠大量扩展头;
- 訪問路径是否有規律:多數蜘蛛會按連結结构逐层展開,而不是只盯着某几個固定 URL 反复請求;
- 抓取频率與並發:真蜘蛛的节律相對稳定,突發高並發通常来自压测或采集;
- 是否执行 JS:對不支持渲染的蜘蛛,頁面里只有 JS 生成的内容它看不到,請求路径也會因此不同。
第四步:把结论落到运营動作上
识別完成後,建议做三件事。
- 分開統計:在日誌分析里把“已驗證蜘蛛”和“疑似伪装”分成两條曲线,只有前者才用来判断抓取是否正常。
- 分級處理伪装請求:少量掃描可以忽略;持續高频、明顯消耗带宽的,再考虑限流或封禁,並且規則要能随时調整。
- 不要誤伤:不要在 UA 层面直接封 “spider”“bot” 這類關键字,也不要因為某個 IP 段里混有伪装請求就整段封禁,搜尋引擎的出口 IP 可能與別的服務共用。
识別蜘蛛的價值不在“抓坏人”,而在于让“蜘蛛到底来没来、来了多少”這個問题有一個可核查的答案。
几個常见誤区
- 只凭 UA 判断,看到 Googlebot 就認為抓取正常;
- 反向解析没做正向驗證,把伪造的 PTR 记錄当成了證據;
- 把 CDN 或反向代理的 IP 当成蜘蛛 IP,導致統計结果整体偏移;
- 真蜘蛛訪問量偏低时,先去封伪装請求,却忽略了入口頁本身的問题,比如内容單薄、入口太深、响應過慢。
如果已驗證蜘蛛的訪問量長期偏低,比起反复優化识別規則,更值得回头检查入口頁的可發現性與可抓取性。识別只是诊断的起点,不是终点。