蜘蛛池跑起来之後,日誌里會涌入大量自称是搜尋引擎蜘蛛的請求。這里面有真的抓取,也有掃描器、采集程序,甚至只是普通的爬虫工具。把它們混在一起統計,很容易得出错誤的结论:以為蜘蛛来得很勤,實际上有效抓取寥寥無几。分辨真假蜘蛛不是做安全防護,而是為了让运维判断有依據。
為什么不能只看 UA
User-Agent 是請求方自己填的字段,改起来没有任何门槛。市面上有不少現成的模拟工具,UA 可以抄得一字不差。所以“日誌里出現了 Baiduspider 就是百度蜘蛛”這個判断,只在极粗的粒度上成立。真正要看的是 UA、来源 IP 和訪問行為能不能對得上。
三重核對的具体做法
第一层:UA 字符串的细节
正規蜘蛛的 UA 通常有固定格式,長期稳定,不會今天寫一個版本号、明天換一種寫法。如果同一批 IP 每天換着花样切換 UA,或者 UA 里混着多個搜尋引擎的名字,基本可以判定不是官方抓取。另外要注意大小寫和多余空格,伪造的 UA 经常在這些地方露出破绽。
第二层:IP 與反向解析
- 查 IP 归属:官方蜘蛛一般来自可查證的搜尋引擎自有網段,而不是遍布各地的家用宽带 IP。
- 做反向解析:拿到 IP 後反查域名,看是否落在搜尋官方的域名下,再正向解析回去確認一致。
- 看集中度:真蜘蛛的抓取往往從相對集中的網段發出,如果几百個 IP 分散在几十個机房,更像是分布式采集。
第三层:訪問行為
- 抓取节奏:官方蜘蛛有相對稳定的频率,不會在一分钟内把整站刷一遍。
- 路径偏好:真蜘蛛會顺着連結走,也會回訪之前抓過的頁面;采集程序往往直奔列表頁和詳情頁,跳過中間层。
- 资源請求:部分搜尋引擎會請求 CSS、JS 等静態资源,纯文本爬虫通常只抓 HTML。
- 狀態碼反應:遇到 404、503 之後的後續行為,也能反映對方是不是按規則来的。
容易踩的几個誤判
- 把 CDN 回源 IP 当成蜘蛛 IP,統計出来的“抓取量”其實是自己人。
- 把监控探针、健康检查的請求算進蜘蛛日誌,導致資料虚高。
- 只統計總請求數,不看狀態碼分布,忽略了大量 404 被反复抓取的情况。
- 看到 UA 里有 spider 字样就放行,结果放過了一批采集程序。
日誌里建议長期保留的字段
時間、請求 IP、UA、請求路径、狀態碼、响應大小、响應時間這几項要完整留存,最好按天切分並保留一段時間。要做趋势判断时,按 IP 段聚合、按 UA 聚合、按路径聚合分別看一遍,比只看總量有用得多。
把判断落到运维動作上
- 先给日誌做标注,把確認的官方蜘蛛、可疑請求、明确無關的流量分開。
- 對確認的官方蜘蛛,观察它在入口頁上的抓取深度和回訪間隔,作為調整结构的參考。
- 對可疑請求,不要急着封禁,先记錄来源和路径,避免誤伤。
- 對明确的恶意采集,按實际情况限速或拦截,同时检查是否有内容被整站搬走。
日誌的價值不在于證明蜘蛛来了多少次,而在于能把“来了但没抓對地方”這類問题找出来。分辨真假只是第一步,後面才是調整入口頁和連結结构。
這套核對方式不需要額外工具,一台能跑日誌分析脚本的机器就够。坚持记錄几周之後,你會對自家蜘蛛池的真實抓取情况有一個比任何第三方資料都可靠的判断。