核对抓取限制,关键不是看配置文件写了什么,而是看抓取工具实际拿到了什么。做法是让目标抓取方请求一批代表性URL,记录HTTP状态码、响应头和返回内容,再与站点配置逐项对照。如果状态码是403、429或返回验证页,说明请求被拦截;如果是200且内容完整,说明限制没有生效在那一层。
抓取限制可能出现在多个位置,排查前先分清对象,否则容易把一种现象当成唯一原因。常见层次包括:
robots元标签或响应头中的抓取指令;核对时按“网络层→应用层→页面层→渲染层”的顺序走,每层只回答一个问题:请求有没有到达、有没有被拒绝、返回内容是否完整。
选5到10个有代表性的URL,覆盖首页、栏目页、详情页和分页。用命令行工具发送与目标抓取方一致的请求,保存状态码、响应头和响应体。例如:
curl -I -A "目标UA" https://example.com/page
只看响应头还不够,再加一次抓取正文:
curl -s -o page.html -w "%{http_code} %{size_download}" -A "目标UA" https://example.com/page
记录三项:状态码、下载字节数、文件里是否包含该页核心文字。如果状态码是200但字节数明显偏小,或正文关键词搜不到,说明限制可能以软拦截形式存在,例如返回了空壳页或验证页。
拿到请求结果后,逐项对照站点配置。判断依据可以这样用:
如果配置里写了允许某UA,但实际请求仍被拒绝,不要直接断定是配置错误。可能原因还包括CDN缓存了旧规则、多台服务器规则不一致、请求经过代理后源IP变化。此时应分别从不同出口IP各发一次请求,比较结果差异。
调整规则后,用同一批URL、同一UA、相近时间间隔再抓一次,比较前后状态码和内容完整度。复查时注意:搜索需求、页面改版、缓存刷新都会影响结果,不能只凭一次请求就认定限制已解除。建议连续观察若干天,并记录每次请求的时间、出口IP和返回摘要。
如果复查中状态码在200和403之间反复,优先怀疑频率阈值或负载均衡下节点规则不一致,而不是直接放宽全部限制。
先列出你怀疑被拦截的10个URL,用目标UA各请求一次,把状态码、字节数和正文命中情况记成一张表。表里出现403或429的行,就是接下来要对照服务器、CDN和应用配置逐项排查的入口。