做完一轮入口頁布置之後,很多人第一件事就是去翻服務器日誌,看到几行带着 bot 字样的 UA 记錄,就預設抓取已经跑起来了。實际上,日誌里的“搜尋蜘蛛”是最容易被誤讀的一類資料:字符串可以随便寫,频次可以人為制造,看到的東西和真實抓取之間還有不少距离。
為什么不能只看 UA 字符串
User-Agent 是請求方自己填寫的字段,任何脚本都能把它改成一模一样的蜘蛛标识。所以日誌里出現“Googlebot”或“Baiduspider”,只說明對方愿意這么标榜自己,並不說明它真的是搜尋引擎的抓取程序。把 UA 当成唯一判據,最常见的後果是:你以為入口頁被正常抓取、目标 URL 已经在被發現的路上了,實际上進来的只是一台掃目錄的机器。
三種常用的驗證方式
1. UA 只是第一道筛子
先用 UA 把日誌里所有自称蜘蛛的记錄筛出来,這一步只做分類,不做结论。筛完以後,注意看它的請求特征:真蜘蛛通常會跟着 robots.txt 的規則走,被禁止的路径不會反复請求;而伪装爬虫往往無视 robots.txt,還會顺手掃後台、配置文件、接口路径。
2. 反向 DNS 加正向解析
這是各搜尋引擎官方推荐、也相對可靠的驗證方式:先對来源 IP 做反向 DNS 查询,拿到主机名;再對這個主机名做一次正向解析,看它是否回到同一個 IP。主机名要落在搜尋引擎公布的域名後缀上,才算通過。两步都一致,可信度就高很多;只有反向结果對得上、正向解析回不去,基本可以判定是伪造。
3. 比對官方 IP 段
几家主流搜尋引擎都會在自己的站長平台或帮助文档里公布抓取 IP 段。把日誌里的来源 IP 與之比對,是最省事的批量核驗方法。IP 段會更新,建议隔一段時間重新拉一份最新的列表,別用几年前存的舊文件。
日誌里几個容易誤判的信号
- 站点在 CDN 或 WAF 後面。日誌里记錄的往往是回源 IP 或 CDN 节点 IP,而不是蜘蛛的真實 IP。這種情况要先確認日誌是否保留了真實客戶端 IP 字段,否則驗證结果會完全跑偏。
- X-Forwarded-For 被当成事實。這個头同样可以被伪造,只有在確認請求来自你自己信任的反代时才有參考價值。
- 频次高就等于抓得好。短時間内的密集請求更可能是掃描行為,真蜘蛛的抓取节奏通常和站点規模、更新频率有關,不會毫無規律地全站横冲直撞。
- 只看狀態碼。日誌里一排 200 只能說明服務器正常响應了,不能說明對方是搜尋引擎,也不能說明目标 URL 會被繼續抓取。
把驗證做成日常习惯
- 每周固定導出一次日誌,按 UA 归類,标注可疑来源。
- 對新增的 IP 抽样做反向 DNS 與正向解析,把確認過的 IP 记入白名單。
- 定期更新官方公布的 IP 段,清理白名單里已经失效的记錄。
- 把被誤判為蜘蛛的 IP 單獨记錄,必要时在防火墙层面做限速或拦截。
判断抓取是否真實發生,看的是“来源可信 + 行為合理”两個條件同时成立,而不是某一條日誌记錄里出現了蜘蛛的名字。
把日誌驗證這一步做扎實,後面再看收錄、看 URL 發現進度时,得到的判断才有依據。否則很容易把伪装爬虫的訪問量当成抓取成果,方向從一開始就是偏的。