為什么要先分清真假
蜘蛛池入口頁是對外開放的,只要 URL 被曝光,收到的請求里就一定會混進各種爬虫:有搜尋引擎官方蜘蛛,也有伪装成蜘蛛的采集程序、掃描器和压测脚本。這两類請求的處理方式几乎相反——真蜘蛛要保證它顺利拿到頁面,假蜘蛛則要考虑限流或拦截。如果只凭 UA 一句话就下结论,结果往往是该放行的被拦了,该拦的反而一路放行。
UA 是最外层,也最不可信
請求头里的 User-Agent 最容易看到,也最容易伪造。任何人寫一行代碼就能把自己伪装成 Googlebot 或 Baiduspider。所以 UA 只能做初筛,不能当结论。观察时注意两点:
- UA 是否完整。真蜘蛛的 UA 通常格式固定,带有版本号或平台标识;伪造的 UA 经常缺字段、大小寫混乱,或者干脆是几個關鍵詞拼出来的。
- UA 與行為是否吻合。如果自称是某搜尋引擎的蜘蛛,却频繁請求 robots.txt 之外的敏感路径、带上一堆杂乱查询參數,就值得怀疑。
IP 反查:更硬的一层證據
UA 可以随便寫,来源 IP 却很难伪装到位。搜尋引擎官方一般會公開自己的爬虫 IP 段,或者支持通過反向 DNS 做驗證。可操作的步骤是:
- 把可疑請求的来源 IP 记下来,做一次 rDNS 查询,看解析出的主机名是否落在官方域名下。
- 對反查结果再做一次正向解析,確認能解析回同一個 IP。只做反向不做正向,很容易被伪造的 PTR 记錄骗過去。
- 如果拿不到 rDNS,就對照官方公布的 IP 段列表,看是否落在其中。
三步都能對上,基本可以認定為真蜘蛛;任何一步對不上,就要繼續保持怀疑。
行為特征:抓取节奏比身份更有參考價值
真蜘蛛的抓取是有規律的。它們一般會遵守 robots 指令,按站点结构和抓取预算分配請求,單個 IP 的並發不會离谱,也不會在短時間内把整個目錄掃一遍。反過来,采集器和掃描器的典型表現是:
- 並發高、間隔固定,像按脚本一條條跑;
- 只挑列表頁和詳情頁,對静態资源、robots.txt 毫無兴趣;
- 請求路径跳跃,直接訪問深层 URL,不走入口頁;
- 對 4xx、5xx 不做退让,被拒之後繼續高频重试。
把這些特征和 UA、IP 结合起来看,判断會稳得多。
几種常见的誤判
- 只看 UA 就封 IP:真蜘蛛換 IP 段是常事,封掉一個段可能连带影响正常抓取。
- 把低频采集当成真蜘蛛:慢速采集器會刻意压低频率躲避檢測,光看速度容易漏判。
- 拿 CDN 回源 IP 做判断:经過 CDN 或代理时,日誌里记錄的可能是节点 IP,用它去反查官方域名自然對不上,需要先看 X-Forwarded-For 之類的真實来源字段。
- 把云服務商 IP 一律拉黑:部分官方抓取也會從云上發起,一刀切容易誤伤。
實操建议
- 先在日誌里按 UA 分组,統計請求量和路径分布,找出異常的那几组。
- 對異常组做 IP 反查與正向確認,确定真假。
- 真蜘蛛:检查入口頁是否可達、返回碼是否正常、有没有被規則誤拦。
- 假蜘蛛:優先做限流而不是直接封禁,尤其是共享 IP 段,封禁的连带風險更大。
- 把判断结果沉淀成規則,定期复查,因為 IP 段和 UA 都會變。
真假判断没有一步到位的办法,UA、IP、行為三條线交叉驗證,比任何單一信号都可靠。規則定得越细,誤伤真蜘蛛的概率就越低。
對蜘蛛池入口頁来说,這套判断的意义不只是挡住谁,更是確認自己铺出去的入口頁有没有被真正抓走。如果日誌里几乎没有可確認為真蜘蛛的請求,問题往往不在拦截規則,而在入口頁本身的可發現性和可達性。