网络爬取看起来很简单,直到网站开始反击。第一次运行拉取了干净的数据,第二次返回了 CAPTCHA,到第三次你的 IP 已经被限速或封禁。大多数麻烦来自少数几个可以避免的错误:一个地址发送请求过快、缺少请求头、解析器脆弱在页面变化当天就断掉。

这是七个实用网络爬取技巧的清单,能让你的爬虫持续运行、数据保持干净。每条技巧都针对爬虫被抓获或崩溃的一个具体方式,配有你今天就可以采取的行动。读完之后,你将知道如何看起来像真实访客、控制请求节奏、在布局变更后存活下来,并判断何时应该将困难部分外包给托管服务,而不是手动应对它们。

爬虫为何被封锁

在进入技巧之前,先了解你面对的是什么会有所帮助。网站通过寻找人类永远不会产生的模式来检测自动化:所有请求来自同一个 IP、完全均匀的节奏、缺失或不一致的浏览器请求头,以及忽略专门设置来捕获机器人的隐藏陷阱的流量。防御措施从软性的(速率限制)到硬性的(CAPTCHA、指纹识别、只有真实浏览器才能通过的 JavaScript 挑战)。

这些都不是各自无法突破的。诀窍是不要显得突出:分散你的请求,发送浏览器发送的请求头,放慢到合理的节奏,只在目标确实需要时才使用重型工具。下面的七条技巧从请求层向外工作,它们是叠加的,所以没有合理节奏的轮换仍然会让你被标记。

1. 负责任地爬取,然后轮换你的 IP

网站发现爬虫最常见的方式就是观察每个请求来自的 IP 地址。从一个地址发送数百个请求,你就会被限速、挑战或封禁。将请求分散到多个地址池意味着没有单一 IP 会呈现出可疑的模式,这就是为什么 IP 轮换是其他一切所建立的基础。

在轮换之前,要负责任地爬取:坚守任何人无需账号就能看到的公开数据,阅读目标的 robots.txt 并遵守其声明的限制,并将请求量保持在不会给任何人的服务器造成压力的范围内。礼貌的爬虫比激进的爬虫不被封锁的时间长得多,也让你远离不必要的法律和伦理麻烦。

对于轮换本身,一个循环使用多个地址的服务让一个项目表现得像百万个独立访客。软目标使用数据中心 IP 没问题;有成熟代理封锁名单的网站可能需要被视为普通消费者连接的住宅或移动地址。不被封锁地爬取涵盖了更广泛的策略,但轮换是你的起点。

2. 设置真实、最新的 User-Agent

User-Agent 是一个 HTTP 请求头,告诉网站哪个浏览器在访问。许多爬虫不设置它,或者发送一个明显的库默认值,这是最容易检查的特征之一:没有 User-Agent 或任何真实浏览器都不会发送的 User-Agent 的请求会立即被封锁。始终提供一个当前的、合法的 User-Agent 字符串。

保持这些字符串的新鲜度。每个 Chrome、Firefox 或 Safari 发布版本都附带一个新的 User-Agent,所以运行去年数值的爬虫随着时间推移会越来越可疑。在几个真实 User-Agent 之间轮换,这样网站就不会看到来自同一个精确字符串的突然请求高峰,并确保你的其余请求头(Accept-Language、Accept 等)与你声称使用的浏览器一致。

3. 用随机延迟控制请求节奏

一个全天候精确每秒发送一个请求的爬虫很容易被发现。没有人类会这样浏览,完全均匀的节奏本身就是机器人指纹。在请求之间添加随机延迟,根据目标从几秒到十秒不等,使你的流量看起来不那么机械。

控制节奏也是一种礼貌。过于猛烈地轰炸服务器可能会让所有人都受影响,所以如果响应开始变慢,退缩而不是加大力度。对于特别礼貌的爬虫,检查网站的 robots.txt 中的 Crawl-delay 行,它告诉你请求之间应该等多久,以免给服务器造成过载。

抖动优于固定延迟

固定的两秒间隔仍然是一种机械模式。对每个请求的等待时间进行随机化,使没有两个间隔完全相同。一点抖动将你的负载分散到任何单一秒之外,使你的节奏读起来像人类而不是调度程序。

4. 只在必要时使用无头浏览器渲染

有些网站依赖微妙的信号(网络字体、浏览器扩展、Cookie、JavaScript 执行)来判断请求是否来自真实用户。内容在客户端构建的页面根本无法通过普通 HTTP 请求获取,因为数据根本不在初始 HTML 中。对于这些,像真实用户一样运行页面的无头浏览器是出路。

Playwright、Puppeteer 和 Selenium 这样的工具驱动真实浏览器引擎,执行网站渲染内容所需的 JavaScript。代价是成本:每个实例是一个完整的浏览器,消耗 CPU 和内存,限制了你一次可以运行的数量,并使每个请求变慢。所以将渲染作为最后手段。首先检查网络面板,看页面是否已经调用了一个内部 JSON API,因为直接调用该端点比解析渲染后的 HTML 更快更稳定。将无头路径保留给真正需要它的页面。爬取 JavaScript 网站有详细介绍。

Crawlbase Crawling API

轮换、真实浏览器指纹、可选的 JavaScript 渲染和自动重试,通过单次调用即可获得。你发送一个 URL,获得干净的 HTML,无需自己运行代理池和无头浏览器集群。需要为现有 HTTP 客户端提供纯粹的轮换?Crawlbase Smart AI Proxy 提供一个在后台循环使用大型住宅和数据中心池的端点。本页大多数技巧都内置其中。

5. 避开蜜罐陷阱

有些网站植入蜜罐链接:对人类不可见但对盲目跟随页面上每个链接的幼稚爬虫可见的元素。触碰一个,网站就知道你是机器人,当场就可以封锁你,无需任何解释。解决方案是像谨慎的人类而不是抓取每个 URL 的脚本那样爬取。

一些防御性习惯能让你远离陷阱。让你的机器人跳过用 CSS 隐藏的链接,如 display: nonevisibility: hidden,因为这些是人类永远不会点击的经典陷阱。从页面的可信、可见部分跟随链接,而不是追踪每个锚点。在批量收集链接之前检查页面结构和 CSS,并对看起来太方便的数据保持警惕,因为有些网站会播种诱饵内容来引诱爬虫。仔细评估链接是防止立即封禁的廉价保险。

6. 监控网站变更并监控你的爬虫

网站不断改变其布局,标记变更将移动或重命名你的目标元素,会悄悄破坏你的解析器。有些网站甚至在不同地方提供不同版本的页面,这在仍在成熟的大型但技术水平较低的零售商中很常见。如果你不监控这些变化,你的爬虫可能运行数天,同时静静地什么也没收集到。

从一开始就构建监控。一种简单有效的方法是每种页面类型一个小型单元测试:搜索结果页一个,产品页一个,评论页一个,每个都断言你依赖的字段仍然存在。按计划对几个代表性 URL 运行这些检查,这样你就能用少量请求发现破坏性变更,而不是在完整爬取返回空结果后才发现。也要做防御性解析:当选择器找不到任何东西时,退回或记录日志,而不是把空白行当作真实数据写入。

7. 为 CAPTCHA 做好计划

当网站确定它在与自动化打交道时,它通常会提供一个 CAPTCHA。这些设计是让机器人完全停下来的,在任何真实访问量下你都无法手动解决它们。你有两个大方向:一个作为获取页面一部分处理挑战的托管爬取服务,或者一个专用的 CAPTCHA 解决服务,如 2Captcha 或 AntiCaptcha,你只在解决步骤时接入。

诚实地权衡利弊。独立的 CAPTCHA 解决服务可能很慢,并且每次解决都增加成本,所以对于不断抛出挑战的网站,值得问一问:以你目前的方式爬取它是否仍然经济。通常更简洁的答案是一个呈现真实指纹、避免触发大多数挑战的获取层,这样你需要解决的数量就会少得多。爬取时绕过 CAPTCHA 对各种选项有更深入的介绍。

将这些技巧组合在一起

没有任何单一技巧是万灵药,这正是重点所在:封锁来自于在多个维度上同时看起来是自动化的,所以防御措施是叠加的。轮换你的 IP,发送真实且最新的请求头,用抖动控制请求节奏,躲避蜜罐,监控布局变更,并为 CAPTCHA 保留一个计划。对于大多数目标,干净的轮换加上正确的请求头就足够了;更重的策略(无头渲染、CAPTCHA 处理)只在战斗最激烈的网站上才会发挥作用。

这也是托管层体现其价值的地方。构建和维护代理池、无头浏览器集群和 CAPTCHA 管道是真实的、持续的工作。将轮换、渲染和挑战处理合并到单个 API 调用中,让你将时间花在你真正想要的数据上,而不是让你到达数据的基础设施上。

回顾

核心要点

  • 轮换 IP 并保持负责任。将请求分散到多个地址,使任何单一地址不会呈现出模式,并且只爬取网站声明的限制范围内的公开数据。
  • 发送真实、最新的请求头。始终提供合法的、最新的 User-Agent,并确保你的其余请求头与你声称使用的浏览器一致。
  • 用抖动控制节奏。使用随机延迟并遵守任何爬取延迟,使你的节奏读起来像人类,并且永远不会使服务器过载。
  • 只在需要时渲染和解决。只在真正需要的网站上使用无头浏览器或 CAPTCHA 解决方案;首先检查内部 JSON API。
  • 监控并做防御性解析。按计划测试每种页面类型,使布局变更能快速浮现,在找不到任何东西时退回或记录日志,而不是写入空白行。

常见问题

避免封锁最重要的网络爬取技巧是什么?

影响最大的措施是轮换 IP 地址使任何单一地址不会呈现出可疑模式,发送带有一致请求头的真实、最新的 User-Agent,以及用随机延迟而不是机械节奏控制请求节奏。除此之外,避开蜜罐链接,监控目标的布局变更以免破坏你的解析器,并为 CAPTCHA 制定计划。对于大多数网站,干净的轮换加上正确的请求头就足够了;更重的策略只在激进目标上才有意义。

为什么轮换 IP 地址如此重要?

网站检测爬虫最常见的方式是检查每个请求来自的 IP 地址。来自一个地址的数百个请求是明显的机器人特征,所以网站会限速、挑战或封禁它。在多个地址池中轮换可以分散你的流量,使任何单一 IP 都不会积累可封锁的历史。软目标使用数据中心 IP 没问题;有成熟封锁名单的网站可能需要被视为普通消费者连接的住宅或移动地址。

请求之间应该等多久?

没有通用数字,但对于许多目标,几秒到大约十秒的随机延迟是有效的。关键是随机化而不是发送固定间隔,因为完全均匀的节奏本身就是机器人指纹。观察目标的响应:如果它们开始变慢,退缩而不是加大力度。对于礼貌爬取,检查网站的 robots.txt 中的 Crawl-delay 值并遵守它。

什么时候我真的需要无头浏览器?

只有当页面在客户端用 JavaScript 构建其内容时,普通 HTTP 请求返回的初始 HTML 中不存在数据。像 Playwright、Puppeteer 和 Selenium 这样的无头浏览器像真实用户一样运行页面,但它们消耗大量 CPU 和内存,限制了你一次可以运行的数量。在承担那个成本之前,检查网络面板看看页面调用的内部 JSON API,因为直接调用它比解析渲染输出更快更稳定。

什么是蜜罐陷阱,如何避免?

蜜罐是对人类访客隐藏但对盲目跟随每个链接的爬虫可见的链接或元素,专门设置来捕获机器人。跟随一个会立即将你标记为自动化,可能导致立即封禁。通过跳过用 CSS 如 display: nonevisibility: hidden 隐藏的元素,只从页面可信且可见部分跟随链接,以及在批量收集链接之前检查页面结构来避免它们。

Crawlbase 能为我处理轮换和 CAPTCHA 吗?

可以。Crawlbase Crawling API 轮换 IP,呈现真实浏览器指纹,可选地渲染 JavaScript,并处理能处理的挑战,然后通过单次调用返回干净的 HTML。如果你只需要为现有 HTTP 客户端提供轮换,Smart AI Proxy 提供一个在后台循环使用大型住宅和数据中心池的端点。无论哪种方式,你都将代理池、无头浏览器集群和 CAPTCHA 管道外包出去,而不是自己构建和维护它们。

开始构建

大规模爬取任何站点,无需与基础设施对抗。

Crawlbase 负责处理代理、指纹和 CAPTCHA,让你的团队专注于交付数据流水线,而非维护爬取管道。1,000 次请求免费,无需信用卡。

自助开通 · 无需销售通话 · 提供企业级爬取量