实战指南

网页抓取如何避免被封

抓取被封的原因及对策:代理选择、IP轮换、请求节奏、请求头与指纹,以及如何应对验证码。

网页抓取2026-06-0810 分钟阅读
网页抓取如何避免被封

Key takeaways

封禁来自规律,而非单次请求:同一个IP、同样的节奏、同样的指纹反复出现。

按目标选代理:宽松站点用数据中心,受保护站点用轮换住宅,最严格的用移动代理。

控制并随机化请求节奏。手动浏览的人不会从一个地址每秒发出50个请求。

只有当请求的其余部分看起来像真人时,IP才有用:请求头、User-Agent、TLS和浏览器指纹都要一致。

01

抓取为什么会被封

封禁很少因为单次请求。网站标记的是不像真人的行为:一分钟内同一IP上百次访问、没有cookie或referer的请求、忘了加载图片的无头浏览器,或者一看就是“自动化库”的TLS握手。任何一个都是弱信号,叠加起来就成了确凿判断。

把自己当成防守方来想。反爬系统按IP信誉、请求频率以及客户端与真实浏览器的相似度给每个访客打分。任一项过线,你就会收到验证码、403,或者更糟——被悄悄投喂错误数据。目标不是隐形,而是看起来普通。

The mistake is treating them as interchangeable. They solve overlapping problems differently.
02

为目标选对代理类型

数据中心代理快又便宜,对于不设防的站点(文档、开放数据、小型目录)完全够用。它们来自已知的托管IP段,所以重防护目标会很快识别并限流。

住宅和ISP代理使用真实的消费者IP,带有普通家庭连接的信任度。住宅IP池大、地理分布自然,是电商、搜索结果和社交平台的默认选择。移动代理更进一步:运营商把许多用户放在同一地址后面(CGNAT),封这个IP会伤到真实客户,所以防守方会谨慎。只有在住宅不够时再用移动代理——它更贵。

03

轮换IP但不破坏自己的会话

对于无状态抓取——商品页、列表、搜索——每个请求或每几个请求就换IP,让任何单一地址都不会积累可疑历史。这里IP池规模很关键:在数百万IP间轮换和只在几百个里循环完全不同。

凡是涉及登录或购物车的,反过来做:保持粘性会话,让同一个IP贯穿整个流程。会话中途换IP本身就是危险信号——真实用户不会在两次点击之间在城市间瞬移。把轮换策略匹配到任务,而不是全局设置。

04

让请求看起来像真实浏览器

干净的IP配上草率的请求照样被抓。发送真实、最新的User-Agent,以及正常浏览器会发的请求头(Accept、Accept-Language、Referer),并在同一会话内保留cookie。请求头不匹配或缺失,是网站最容易做的检查之一。

对于重度JavaScript目标,Playwright、Puppeteer或Selenium很有用,但默认设置会暴露。无头标志、空插件列表和可识别的TLS/JA3签名都会出卖你。使用最新的反检测工具,并确保浏览器指纹与代理地理位置讲同一个故事:德国IP配en-US、America/New_York的浏览器就是明显矛盾。

05

节奏、重试与处理验证码

限制并发并在请求间加入随机延迟,而不是以固定间隔猛打。人类流量是突发且不规则的;完美均匀的时间间隔就是机器特征。遇到429或503时,按指数退避,而不要立即重试——重试风暴会把软限制变成硬封禁。

把验证码当成反馈,而不仅仅是障碍。突然激增通常意味着你的节奏、IP或指纹出了问题。放慢速度、换上全新的住宅IP、重新检查请求头,再考虑使用打码服务。同时守住底线:在适用处尊重robots.txt,抓取公开数据而非未经授权登录后的内容,并把请求量控制在不损害网站的水平。

FAQ

不。宽松站点用数据中心或ISP代理就行。把住宅和移动代理留给有真正反爬保护的目标,那里它们的信任度和大IP池才重要。

没有通用数字——取决于目标。先保守,随机化时间,关注429/验证码响应,只在它们保持正常时才提速。

通常是指纹问题。可信IP配上无头默认设置、缺失的请求头,或与浏览器语言矛盾的地理位置,看起来仍像自动化。

无状态页面要。登录或购物车流程要保持粘性会话——会话中途换IP本身就是危险信号。

在许多司法辖区,抓取公开可用数据通常是允许的,但服务条款、版权和隐私法仍然适用。避免抓取未经授权登录后的数据,敏感情况请咨询律师。