in

如何在爬取网页时绕过 CloudFlare

如何在爬取网页时绕过 Cloudflare

Cloudflare 以其CDN服务而闻名,但在网络抓取方面,它是臭名昭著的 Cloudflare Bot Management。

Cloudflare 可以限制谁可以访问其内容,因此在出现网络抓取时需要绕过 Cloudflare。

要绕过 Cloudflare 机器人管理,我们首先应该快速了解一下它是如何工作的。然后,我们可以确定挑战并设计策略。

在本文中,我们将首先了解 Cloudflare 如何使用各种网络技术来计算信任分数,然后我们将了解在网络抓取时提高信任分数的现有解决方案。

我们还将介绍常见的 Cloudflare 错误和指示请求未能绕过 Cloudflare 的迹象,以及它们的确切含义。让我们开始吧!

什么是 Cloudflare 机器人管理?

Cloudflare Bot Management 是一种网络服务,它试图检测并阻止网络抓取工具和其他机器人访问网站。
它是一种复杂的多层服务,通常用于合法的机器人程序和垃圾邮件预防,但它正成为一种越来越流行的阻止网络抓取工具访问公共数据的方式。

首先,让我们看一下爬虫遇到的一些常见 Cloudflare 错误及其含义。

大多数 Cloudflare bot 块都会导致 HTTP 状态代码 403(最常见)、401、429 和 502。不过,最重要的是,主体包含实际的错误代码和定义。这些代码可以帮助我们了解发生了什么,并帮助我们绕过 Cloudflare 403 错误。

有几种不同的错误消息表明我们未能绕过 Cloudflare:

Cloudflare 错误 1020:访问被拒绝是抓取 Cloudflare 时最常遇到的错误之一,它没有指明确切原因。所以要绕过 Cloudflare 1020 需要全面的爬虫防御工事。

Cloudflare 错误 1009 附带一条信息:已禁止您的 IP 地址所在的国家或地区”。这是由于网站在地理上被锁定到特定国家造成的。因此,要绕过 Cloudflare 1009,可以使用来自允许国家/地区的代理。换句话说,如果该网站仅在美国可用,则爬虫需要美国代理才能绕过此错误。

Cloudflare 错误 1015:您正在被速率限制意味着抓取工具抓取速度太快。虽然最好在网络抓取时遵守速率限制,但可以将此限制设置得非常低。要绕过 Cloudflare 1015,爬虫流量应该通过多个代理(代理、浏览器等)进行分配。

Cloudflare 错误 1010:访问被拒绝是由浏览器指纹被阻止引起的。在使用没有指纹混淆的无头浏览器进行抓取时,经常会遇到这种情况。要绕过 Cloudflare 1010,无头浏览器需要针对Javascript 指纹识别进强化

有 Cloudflare 挑战页面(又名浏览器检查),它不表示阻止但不信任客户端不是机器人。因此,要绕过 Cloudflare 浏览器检查,我们可以提高我们的一般信任评级或解决挑战(我们将在下面的绕过部分中介绍)。

其中一些 Cloudflare 安全检查页面可以请求解决验证码挑战,尽管实现 Cloudflare 验证码绕过的最佳方法是根本不遇到它!
接下来我们就来看看Cloudflare到底是如何检测网络爬虫的。

最后,这是所有 Cloudflare 块错误工件的列表:

  • 响应标头可能具有cf-ray字段值。
  • 服务器标头字段的值为cloudflare
  • Set-Cookie响应标头有__cfuid=cookie 字段。
  • “需要注意!” 或 HTML 格式的“Cloudflare Ray ID:”。
  • HTML 格式的“Cloudflare 的 DDoS 保护”。
  • CLOUDFLARE_ERROR_500S_BOX请求无效的 URL 时。

Cloudflare 如何检测网络抓取工具?

为了检测网络抓取工具,Cloudflare 使用许多不同的技术来确定流量是来自人类用户还是来自机器。

Cloudflare 正在将许多不同分析和指纹识别方法的结果组合成一个整体信任评分。这个分数决定了用户是否被允许访问该网站。

根据最终的信任评分,可以让用户通过或要求其解决诸如验证码或计算 javascript 工作证明之类的挑战,或者完全阻止:

此外,Cloudflare 正在跟踪用户的持续行为,并不断调整信任评分。

这种复杂的操作使网络抓取变得困难,但如果我们查看每个单独的跟踪组件,我们就会发现在网络抓取很有可能的情况下绕过 Cloudflare!

TLS 指纹识别

TLS(或 SSL)是我们建立安全连接(即使用 https 而不是 http)时发生的第一件事。客户端和服务器协商如何加密数据。

这种协商可以进行指纹识别,因为现代网络浏览器具有非常相似的 TLS 功能,而某些网络抓取工具可能会缺失。这通常称为 JA3 指纹识别。

例如,一些网络抓取库和工具具有独特的 TLS 协商模式,可以立即识别。虽然有些使用与网络浏览器相同的 TLS 技术,但很难区分。

因此,请使用对 JA3 指纹识别具有抵抗力的网络抓取库

有关更多信息,请参阅我们对 TLS 指纹识别的完整介绍,该介绍演示了如何针对 JA3 测试您的工具和我们的JA3 指纹 Web 工具,以更深入地了解这项技术。

IP 地址指纹识别

IP 地址分析中有许多因素。首先有不同类型的 IP 地址:

  • 住宅地址是 ISP 分配给普通互联网消费者的家庭地址。因此,住宅 IP 地址提供了积极的信任评分,因为这些地址主要由人类使用并且获取成本很高。
  • 移动地址由移动电话塔分配。因此,移动 IP 也提供了积极的信任评分,因为它们主要由人类使用。此外,由于许多移动用户可能会在彼此之间共享和回收 IP 地址(每个人都有一个塔),这意味着 Cloudflare 无法可靠地对这些 IP 进行指纹识别。
  • 数据中心地址被分配给各种数据中心和服务器平台,如谷歌云、AWS 等。因此,数据中心 IP 提供了一个显着的负面信任评分,因为它们最有可能被非人类使用。

通过 IP 分析,Cloudflare 可以粗略猜测连接客户端的可信度。例如,人们很少从数据中心 IP 浏览,因此使用数据中心代理的网络爬虫很可能被阻止。

因此,请使用高质量的住宅或移动代理

有关更多信息,请参阅我们对 IP 阻止的完整介绍以及如何计算 IP 信任。

HTTP 详细信息

由于大多数人类用户使用为数不多的可用 Web 浏览器之一,因此 HTTP 连接详细信息是识别抓取工具和机器人程序的一种简单方法。

首先,大多数网络都在使用 HTTP2,许多网络抓取工具仍然使用 HTTP1.1,这是一个死的赠品。
此外,可以对 HTTP2 连接进行指纹识别,因此使用 HTTP 客户端的爬虫需要避免这种情况。

请求标头等其他 HTTP 连接详细信息也会影响信任分数。例如,大多数网络浏览器以特定顺序排列它们的请求标头,这可能与网络抓取中使用的 HTTP 库不同。

因此,请确保网络抓取器请求中的标头与真实网络浏览器的标头相匹配,包括排序

JavaScript 指纹识别

最后,javascript 提供了大量有关用于信任评分计算的连接客户端的信息。由于 javascript 允许在客户端机器上执行任意代码,因此它可用于提取有关连接用户的大量信息。

服务器可以使用 Javascript 代码进行指纹识别:

  • Javascript 运行时细节
  • 硬件细节和功能
  • 操作系统详细信息
  • Web 浏览器详细信息

这是可用于计算信任评分的大量信息。

幸运的是,javascript 具有侵入性并且需要时间来执行,因此机器人和人类都不喜欢它,从而限制了实用的 Javascript 指纹识别技术。换句话说,没有人愿意为页面加载等待 5 秒。

如需更深入的了解,请参阅我们关于在网络抓取工具检测中使用 javacript 的文章。

绕过 javascript 指纹识别是目前为止最困难的任务。理论上,可以对这些 javascript 任务进行逆向工程和模拟,但更容易访问和更常见的方法是使用真正的网络浏览器进行网络抓取

这可以使用SeleniumPuppeteerPlaywright浏览器自动化库来完成,这些库可以启动真正的无头浏览器并导航它以进行网络抓取。

因此,将浏览器自动化引入您的抓取管道可以大大提高信任度

更高级的抓取工具甚至可以结合浏览器和 HTTP 抓取功能以获得最佳性能。使用资源密集型浏览器建立信任分数并使用Python 中的 httpx等快速 HTTP 客户端继续抓取。

行为分析

尽管如此,信任评分并不是一个恒定的数字,并且会随着持续的连接不断调整。

例如,如果我们从 80 分开始,然后在几秒钟内继续连接到 100 个页面,我们就会脱颖而出,成为非人类用户,这将降低信任分数。

另一方面,机器人的行为像人类一样,信任分数可以保持稳定甚至增加。

因此,重要的是通过使用代理和不同指纹配置的多个代理来分配网络抓取流量,以防止减少信任核心。

如何绕过 Cloudflare 机器人保护?

现在我们已经介绍了 Cloudflare 用来识别网络抓取工具的所有部分——我们如何整体融合?

在实践中,我们有两种选择。

我们可以通过使用类似浏览器的 http2 连接、具有相同的 TLS 功能和通用的 javascript 来对所有这些检测技术进行逆向工程和强化……

或者,我们可以使用真正的网络浏览器进行网络抓取。通过控制一个真正的网络浏览器,我们不再需要假装让绕过 Cloudflare 变得更容易。

然而,许多自动化工具,如Selenium、Playwright和Puppeteer会留下它们存在的痕迹,这些痕迹最好需要修补以获得更高的信任分数。为此,请参阅Puppeteer 隐身插件和其他类似的隐身扩展等项目。

为了在 2024年使用 Cloudfare 旁路进行持续的网络抓取,这些浏览器应该重新混合使用不同的指纹配置文件:屏幕分辨率、操作系统、浏览器类型都会在 Cloudflare 的机器人得分中发挥作用。

最后,一些现有的开源工具可以帮助绕过 Cloudflare,例如cloudscraper,它可以使用 Python 或 Nodejs 求解器解决 Cloudflare 的 javascript 挑战。

常问问题

为了总结这篇文章,让我们看一下有关 Web 抓取 Cloudflare 页面的一些常见问题:

是的。Web 抓取公开可用数据在世界范围内是完全合法的,只要抓取工具不会对网站造成损害。

是否可以完全绕过 Cloudflare 并直接抓取网站?

有点。由于 Cloudflare 是一个CDN,因此可以通过直接连接到 Web 服务器来完全避免它。这是通过使用 DNS 记录或逆向工程发现服务器的真实 IP 地址来完成的。但是,这种方法很容易被检测到,因此在网络抓取时很少使用。

是否可以使用缓存服务绕过 Cloudflare?

是的,Google Cache 或 Archive.org 等公共页面缓存服务可用于绕过 Cloudflare。然而,由于缓存需要时间,缓存的页面数据通常是过时的,不适合网络抓取。缓存页面也可能缺少动态加载的内容部分。

还有哪些其他反机器人服务?

还有许多其他反机器人WAF服务,如PerimeterXAkamaiDatadomeImperva(又名 Incapsula),尽管它们的功能与 PerimeterX 非常相似,因此本教程中的所有内容也可以应用于它们。

绕过爬虫阻止Cloudflare总结

在本文中,我们了解了如何在网络抓取时绕过 Cloudflare 反机器人系统。

首先,我们了解了 Cloudflare 机器人管理如何通过 TLS、IP 和基于 javascript 的客户端分析来识别网络抓取工具。使用住宅代理和防指纹库可能是一个好的开始。此外,使用真实的网络浏览器并重新混合它们的指纹数据会使网络抓取工具难以检测

最后,我们了解了一些常见问题,例如替代绕过方法及其合法性。

Written by 河小马

河小马是一位杰出的数字营销行业领袖,广告中国论坛的重要成员,其专业技能涵盖了PPC广告、域名停放、网站开发、联盟营销以及跨境电商咨询等多个领域。作为一位资深程序开发者,他不仅具备强大的技术能力,而且在出海网络营销方面拥有超过13年的经验。