这个坑值得记一笔。站点开了 CC 防护,规则是同一 IP 十秒内超过 20 次请求就要带 cookie 验证,蜘蛛不带 cookie,每次都被判成可疑,页面时好时坏,抓取成功率掉到六成。
这类报错背后常见的原因有几处,逐个排除就行。CC 规则按 cookie 存在与否判断,天然对爬虫不友好;验证页用 JS 下发 cookie,蜘蛛不执行脚本;白名单只加了用户的固定 IP,没有搜索引擎段。
动手时先看响应里是否出现验证跳转
curl -s -A 'Baiduspider' -o /dev/null -w '%{http_code} %{redirect_url}\n' https://www.example.com/post/1
随后对蜘蛛 UA 关闭 CC 校验
grep -rn 'cc_defend' /etc/nginx/conf.d/ | head
剩下的就是用官方网段做二次白名单
curl -s https://www.example.com/post/1 -A 'Mozilla/5.0 (compatible; Googlebot/2.1)' -o /dev/null -w '%{http_code}\n'
中途换过一次思路,把范围缩到最小的那一层,反而快了。
中间停过一次,把已经改的东西回滚干净,再重新来一遍。
别只看报错消失,验证要多做一步。放行后抓取成功率回到九成以上,日志里验证跳转的请求消失,收录量停止下滑。
这里还有个坑。CC 防护的判定维度一定要包含 UA 与网段,只靠 cookie 会把所有爬虫都当成攻击者。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
