日誌里的“蜘蛛”不一定是蜘蛛
網站訪問日誌里经常出現带 bot 字样的 User-Agent,看起来像是搜尋蜘蛛在抓取頁面。實际情况要复杂一些:有一部分是真實的搜尋引擎抓取,有一部分是第三方采集、监控工具、安全掃描器,甚至有人刻意伪装成搜尋引擎蜘蛛来绕過限制。如果不做核對,很容易把假蜘蛛造成的压力当成搜尋抓取問题来處理,也可能誤封真實蜘蛛。
為什么要花時間核對来源
核對来源有几個直接的好處:
- 判断服務器压力到底来自搜尋抓取還是其他爬虫,避免調错方向;
- 区分日誌中不同来源的請求,統計出来的抓取資料才有參考價值;
- 在設定限速、封禁規則时,不至于誤伤真實蜘蛛;
- 發現被大量伪造 UA 訪問时,能及时检查是否有内容被搬运或掃描。
三层核對:UA、IP、反向解析
User-Agent 只能作為线索
User-Agent 是客戶端自己声明的字段,可以随意伪造。它的作用主要是缩小范围:先從日誌里筛出疑似蜘蛛的請求,再進入後面的驗證,不能單獨作為判断依據。
IP 段是較可靠的依據
主流搜尋引擎會公布各自的抓取 IP 段或提供對應的驗證文档。把日誌 IP 與官方列表比對,能過滤掉相当一部分伪装請求。需要注意的是,這些列表會更新,建议定期重新拉取;同时不要凭记忆使用舊的 IP 段,否則容易把新加入的抓取节点当成假蜘蛛。
反向解析形成双重確認
比較稳妥的做法是反向解析加正向解析的组合驗證:先對 IP 做反向 DNS 查询,看得到的主机名是否属于搜尋引擎官方域名後缀;再對该主机名做正向解析,確認解析结果是否回到同一個 IP。两步都通過,可信度才比較高。只做反向解析,容易被伪造的 PTR 记錄骗過。
一個可操作的核對顺序
- 從日誌中按 User-Agent 篩選出疑似蜘蛛的請求,統計其 IP 分布;
- 將 IP 與搜尋引擎官方公布的 IP 段比對,标记出范围内的部分;
- 對范围外的可疑 IP 做反向解析,检查主机名後缀;
- 對通過反向解析的 IP 再做正向解析,確認與原始 IP 一致;
- 把核對结果记錄成清單,後續規則更新时沿用同一套流程。
核對之後可以做的事
確認真實蜘蛛的請求,可以按正常抓取来观察和優化;確認是伪装的爬虫,則视情况處理。常见方式包括按 IP 或 UA 组合做限速、對高频異常請求返回 403、在日誌中标出這一類来源,方便後續統計。不建议看到 UA 里有 bot 就直接全局封禁,那样容易誤伤真實抓取,也會让後續的日誌分析失去基准。
几個容易被忽略的细节
- 同一個搜尋引擎可能有多個抓取用途的 UA,比如常規抓取、图片抓取、移動端抓取,核對时要分別對待;
- 在 CDN 或反向代理後面,日誌里记錄的可能是节点 IP,需要從 X-Forwarded-For 等头部讀取真實来源,並確認该头部是否可被外部伪造;
- IPv6 抓取需要單獨核對,很多 IP 段列表同时包含 IPv4 和 IPv6;
- 假蜘蛛的請求路径往往集中在特定頁面,比如接口、搜尋頁、用戶頁,结合路径判断更准确。
核對来源不是為了封掉所有非搜尋引擎流量,而是让抓取相關的判断建立在可信的資料上。
把 UA、IP 段和反向解析這三步固定成流程,每隔一段時間重新核對一次,日誌里的抓取資料會稳定很多。後續再做抓取预算、内鏈調整或服務器限速时,參照的就不再是一锅混在一起的訪問记錄。