做蜘蛛池时,大家常把精力花在内容差异、链接结构上,却容易忽略服务器前面那层防护。入口页做得再规整,如果请求还没到应用层就被拦掉,日志里只会留下一片 403,后面的工作都无从谈起。
一、三类常见的拦截,表现各不相同
- WAF 规则命中:常见触发点是 UA 黑名单、请求头缺失(比如没有 Accept)、参数里带特殊字符、批量页面路径高度相似。表现是固定返回 403 或 406,且集中在同一批 IP。
- 速率限制:单 IP 每秒请求数、并发连接数或带宽超阈值后被限流或临时封禁。表现是 429、连接超时,或者前几秒正常、后面开始大面积失败。
- 地区与网段封锁:为省资源把某些国家、地区或云机房段整段屏蔽。表现是连接直接不通,工具里看到的是连接重置而不是 HTTP 状态码。
二、爬虫的来访特征,和攻击流量不太一样
搜索爬虫通常不会长时间压很高的并发,但会持续、稳定地请求大量不同 URL。它的请求头相对完整,UA 会明确标识自己,通过反向解析也能对得上官方网段。真正需要警惕的是:UA 写着爬虫、IP 却来自普通宽带或代理池,这类请求才算异常。
所以判断思路可以简化为:先看来源 IP 是否属于官方网段,再看访问行为是否符合抓取节奏,最后才看 UA 字符串。
三、发现问题后的排查顺序
- 在入口页日志里筛 403、429 等异常状态,看是否集中在某个时间段或某一批 IP。
- 把可疑 IP 做反向解析,确认是否属于搜索爬虫的官方段。
- 临时把该 IP 加入白名单,观察请求能否正常拿到 200 和正文。
- 检查 WAF 与限速规则,是否用整段 CIDR 或泛化 UA 规则把爬虫一并覆盖。
- 确认封锁策略是否同时作用于静态资源,图片、样式被挡同样会影响页面评估。
四、让防护和抓取共存的几种做法
- 按 IP 段放行,而不是按 UA 放行。UA 容易伪造,网段不容易。
- 把入口页所在站点与后台、接口分开配置限速阈值,抓取型页面给更高的单 IP 配额。
- 对静态资源单独设策略,避免出现 HTML 能取、图片全 403 的情况。
- 限速触发时优先返回 429 并带上 Retry-After,而不是直接重置连接。
- 如果确实要做地区封锁,先确认目标搜索引擎的抓取节点落在哪些区域。
一个常见误区是:把所有非浏览器 UA 都当成工具流量拦截。结果往往是自己的抓取通道先被切断,而真正需要防的请求仍然能靠伪造 UA 混进来。
五、日志里要盯的字段
除了状态码,建议同时记录来源 IP、UA、请求路径、响应时间、响应体大小,以及是否命中某条防护规则。有了这些字段,才能区分「页面本身有问题」和「请求压根没进到应用」。如果同一批入口页的状态码在一段时间内整体从 200 变成 403,优先怀疑防护配置,而不是内容。
入口页的价值建立在能被正常抓取这个前提上。把防护规则和抓取需求放在一起核对一遍,往往比反复调整页面模板更直接。