蜘蛛池入口頁暴露在公網,訪問者不全是搜尋引擎蜘蛛。有些采集器、掃描器會伪装成 Baiduspider 或 Googlebot,如果只看 User-Agent 就决定放行或封禁,很容易誤判。這一篇整理几種常见的判断方式,供做入口頁时參考。
為什么不能只看 User-Agent
User-Agent 可以随便改,伪装成搜尋引擎蜘蛛的成本极低。所以 UA 只能作為第一层篩選,不能当结论。真正需要關注的是 IP 归属、反向 DNS 以及訪問行為。
用 IP 反查和 DNS 驗證
主流搜尋引擎官方會公布蜘蛛 IP 段,或者支持通過反向 DNS 驗證。比如 Googlebot 可以用 host 命令反查,確認域名属于 googlebot.com 或 google.com,再正向解析一次,確認结果與原始 IP 一致。百度蜘蛛也有官方 IP 段列表可以對照。如果反查结果對不上,或者 IP 根本不在官方段内,大概率是伪装。
- 先取訪問日誌里的 remote IP。
- 對 IP 做反向 DNS,看域名後缀是否属于搜尋引擎官方。
- 再用该域名做正向解析,確認解析结果與原始 IP 一致。
- 如果搜尋引擎提供 IP 段文件,可以定期同步比對。
观察訪問行為
真蜘蛛的抓取行為通常有規律:會按連結逐步抓取,會請求 robots.txt,會带走一定量的頁面,請求間隔相對稳定。伪装爬虫往往表現不同。
- 短時間内集中請求大量 URL,不理會 robots.txt。
- 只抓特定路径,比如只抓列表頁或只抓带參數的頁面。
- 請求头缺失或異常,比如没有 Accept、Accept-Language 等常见字段。
- 並發很高,但 UA 却寫着某個搜尋引擎蜘蛛。
這些特征單獨看不一定准,但组合起来就有參考價值。
常见的誤判與代價
把真蜘蛛封了,入口頁可能很長時間不被抓取;把伪装爬虫放進来,會消耗服務器资源,甚至被采集内容。两種誤判都有成本。
如果服務器压力不大,與其花大量精力封禁,不如先把入口頁的响應速度和资源占用控制好。识別策略應该服從站点實际需求。
一個可落地的驗證流程
- 记錄完整訪問日誌,保留 IP、UA、時間、URL、狀態碼。
- 每天抽取一定量的蜘蛛訪問记錄,做 IP 反查驗證。
- 對驗證不通過的 IP,先限速而不是直接封禁。
- 观察一段時間,如果持續異常再考虑拒绝。
- 定期更新搜尋引擎官方 IP 段,避免規則過期。
寫進 robots.txt 和服務器規則时的注意点
有些站長會用 robots.txt 的 Crawl-delay 控制频率,但不同搜尋引擎支持程度不一样。服務器层面做限制时,建议按 IP 段放行官方蜘蛛,而不是按 UA 放行。這样伪装 UA 的爬虫就不會因為寫了 Baiduspider 而被放過。
另外,驗證逻辑不要太复杂,否則每次請求都做 DNS 反查會拖慢响應。可以缓存驗證结果,比如同一個 IP 在一段時間内只驗證一次。
把识別做成定期任務
蜘蛛识別不是一劳永逸的事,搜尋引擎的 IP 段和驗證方式會變。把驗證做成定期任務,结合日誌观察,比一次性配置更可靠。入口頁的稳定性比绝對精准的封禁更重要,先保證真蜘蛛能正常抓,再處理異常流量。