你在爬取受 Cloudflare 保护的网站时是否遇到了困难?结束斗争的解决方案就在这篇文章中。有了 Cloudscraper ,你就不用担心被屏蔽或禁止了

如果你曾经访问过受 Cloudflare 保护的网站,你会同意我的观点,即 Cloudflare 在保护网站免受网络攻击方面做得非常出色。随着欺诈者寻找新方法来利用个人和企业,Cloudflare 已成为防御机器人和不需要的流量的顶级网络安全解决方案之一。

不过,对于网络抓取工具来说,这种 WAF 可能会很困难。你可能会遇到某些使用 Cloudflare 保护的网站,这使得在互联网上搜索相关信息时更难抓取它们。因此,无论你的动机是什么,你仍有可能被阻止。

尽管如此,还是有办法解决这个问题。借助 Cloudscraper,你可以绕过 Cloudflare 的反机器人保护来获取你需要的数据。此外,在当今数据驱动的世界中,网络抓取已成为研究人员、数据科学家和企业的重要工具。因此,Cloudscraper 是一个有用的 Python 模块,专门设计用于绕过 Cloudflare 的反机器人页面。它也称为“我受到攻击模式”(IUAM)。

本文将详细解释 Cloudscraper,并向你展示如何在需要抓取受 Cloudflare 保护的网站时利用它。让我们立即开始吧。


Cloudflare 保护消息

在我们继续了解 Cloudscraper 是什么之前,我们认为了解当你访问受 Cloudflare 保护的网页时会看到的常见消息之一会很有帮助。

Cloudflare 保护消息


什么是Cloudscraper

Cloudscraper是一个简单的 Python 程序,可以绕过 Cloudflare 的“我处于攻击模式”(IUAM) 反机器人页面。

换句话说,Python 请求是该 Python 模块的基础。因此,它是基于 Python 请求构建的。你可以使用它来克服 Cloudflare 的反机器人安全措施,以便你可以从内容部署在 Cloudflare CDN 上的网站中抓取信息。

Cloudflare 的反机器人页面目前仅验证客户端是否支持 JavaScript。为了验证请求是否来自真实用户、抓取工具或机器人,Cloudflare 采用了各种浏览器指纹识别技术和检查。因此,Cloudscraper 会伪装成合法的 Web 浏览器,试图绕过 Cloudflare 的 JavaScript 和浏览器指纹识别限制。它通过优化浏览器标头并使用 JavaScript 引擎或解释器解决 JavaScript 问题来实现这一目标,而无需直接反混淆和解析 Cloudflare 的 JavaScript 挑战。由于 Cloudflare 的网页保护始终在不断发展和强化,因此 JavaScript 引擎和解释器至关重要。

请注意,任何使用 Cloudscraper 的脚本在首次访问启用了 Cloudflare 反爬虫程序的任何站点时都会休眠大约 5 秒。但是,在第一次请求后不会有任何延迟。Cloudscraper 的最新版本于 2023 年 4 月 26 日(撰写本文时)发布。


Cloudscraper的安装

Cloudscraper 的安装过程非常简单。你只需使用 pip 运行下面的代码即可。

pip install cloudscraper

PyPI 包可以位于 https://pypi.python.org/pypi/cloudscraper/。因此,一旦安装了 Cloudscraper,你就可以将其集成到你的爬虫中。

或者,要安装 Cloudscraper,你可以克隆存储库并运行以下代码:

python setup.py install

这将自动安装 Python 依赖项。除了默认包含在先决条件中的 js2py 之外,你唯一需要自己安装的是你选择使用的 JavaScript 解释器和/或引擎。它将安装 Python 3 及更高版本、requests >= 2.9.2 和 requests_toolbelt >= 0.9.1 要求。请记住,某些系统已经安装了它。安装完这些库后,请确保安装所有必需的库。

根据项目文档,Cloudscraper 支持以下 JavaScript 解释器和引擎:

  • ChakraCore:库二进制文件也可以在这里看到。
  • js2py: >=0.67
  • native:自制的原生python求解器(默认)
  • js
  • V8:这使用索尼的 v8eval () python 模块。

如何使用Cloudscraper

正如我们在上一节中讨论的,Python 请求是 CloudScraper 的基础。因此,除了不进行请求调用之外,cloudScraper 的功能与 Requests Session 对象完全相同。但它在后台处理了 Cloudflare 的挑战。

因此,如果你熟悉这个 HTTP 库,使用 Cloudscraper 就会很简单。对受 Cloudflare 反机器人保护的网站的请求将从此会话对象自动处理。没有 Cloudflare 的网站将采用通常的方法。

使用 Cloudscraper 时与使用 Requests 时适用相同的原则。因此,你可以使用 scraper.get() 或 scraper.post(),而不是使用 requests.get() 或 requests.post()。下面是一个例子:

import cloudscraper

## Create CloudScraper Instance

scraper = cloudscraper.create_scraper()

## Make Request

response = scraper.get("http://exampleofyourtargetwebsite.com")

因此,让我提醒你,当你第一次访问受 Cloudflare 保护的网站时,CloudScraper 将休眠大约五秒钟,以便有时间通过​​ Cloudflare 挑战。Cloudscraper 将在所有后续请求中使用上述会话 cookie,以避免在成功完成 Cloudflare 挑战并获得有效的 Cloudflare 会话后引发 Cloudflare 挑战。

但是,如果你在未激活 Cloudflare 保护的网站上运行 Cloudscraper,Cloudscraper 将识别这一点,并且不会等待所需的五秒钟来解决 Cloudflare 挑战。由于 Cloudscraper 仅在必要时激活自身,因此在所有目标网站上使用它是一个明智的主意。


将代理与 CloudScraper 一起使用

为了进一步加强你的网络抓取,你可以将代理与 Cloudscraper 一起使用。你可以像处理 Python 请求一样执行此操作。在发出 get() 或 post() 请求时,你将使用 proxy 属性。下面是描述它的代码:

import cloudscraper

## This Would Create CloudScraper Instance
scraper = cloudscraper.create_scraper()

## These are the Proxy Details
proxies = {
'http': 'http://proxy.example.com:8080',
'https': 'http://proxy.example.com:8081',
}

## Here You can Make Request
response = scraper.get("http://exampleofyourtargetwebsite.com", proxies=proxies)

Python requests 包使你能够将请求分发到多个 IP 地址,从而使网站更难以识别和禁止你的网络抓取工具。Python Requests 提供的所有请求方法均由该方法成功处理。它们包括 GET、POST、PUT、DELETE、PATCH 和 HEAD 等。


将 CAPTCHA 求解器与 CloudScraper 结合使用

我们还将研究如何将 Cloudscraper 与验证码解算器一起使用。通过提出验证码挑战,Cloudflare 能够识别并阻止机器人和抓取工具。有趣的是,Cloudscraper 还为第三方验证码求解器提供集成插件(如果你需要),使你能够绕过网站上的 Cloudflare 反机器人安全性。

查看此处的文档,了解受支持的验证码解算器的最新列表。

将这些 CAPTCHA 解算器与 Cloudscraper 结合使用非常简单。以下是如何集成 Capsolver 的示例:

scraper = cloudscraper.create_scraper(

captcha={

'provider': 'capsolver',

'api_key': 'your_captchaai_api_key'

}

)

## Make Request
response = scraper.get("http://exampleofyourtargetwebsite.com")

Cloudscraper 对象使用第三方 CAPTCHA 将其添加为属性,或作为参数提供给 create_scraper()、get_tokens() 和 get_cookie_string() 函数。

你应该访问此处的文档,以查看所有可用的集成验证码求解器所需的参数。


如何更改 Cloudscraper 的浏览器配置文件和用户代理

你可以指示 CloudScraper 在访问受 Cloudflare 保护的网站时模拟特定的浏览器和设备。在构建抓取工具时,你应该利用浏览器属性来实现此目的。下面示例中的代码旨在建立一个 Cloudscraper 会话,该会话伪装成 Windows 计算机,在桌面上运行并使用 Chrome 浏览器。

import cloudscraper

## Create CloudScraper Instance -> Chrome browser // Windows OS // Desktop
scraper = cloudscraper.create_scraper(
browser={
'browser': 'chrome',
'platform': 'windows',
'desktop': True,
'mobile': False,
}
)

## Make Request
response = scraper.get("http://exampleofyourtargetwebsite.com")

另一方面,你可以将 Cloudscraper 会话设置为运行 Chrome 浏览器的 Android 手机:

import cloudscraper

## This would Create CloudScraper Instance -> Chrome browser // Windows OS // Desktop

scraper = cloudscraper.create_scraper(
browser={
'browser': 'chrome',
'platform': 'android',
'desktop': False,
'mobile': True,
}
)

## Make Request
response = scraper.get("http://exampleofyourtargetwebsite.com")

设置自定义用户代理

使用下面的代码,你可以影响“随机”选择用户代理的方式和选择:

import cloudscraper

## Create CloudScraper Instance -> Custom User-Agent
scraper = cloudscraper.create_scraper(
browser={
'custom': 'ScraperBot/1.0',
}
)

## Make Request
response = scraper.get("http://exampleofyourtargetwebsite.com")

通过指定自定义值,CloudScraper 将在 browsers.json 中查找用户代理字符串。如果你提供的自定义用户代理与已知设备、操作系统或浏览器组合匹配,则其他标头和密码将设置为匹配此用户代理设置。

如果用户代理与 browsers.json 文件中的任何已知设备、操作系统或浏览器组合不匹配,则它将设置一组通用的标头和密码。

为了避免 Cloudflare 将你标记为机器人,你在请求令牌并使用这些令牌发出请求时必须使用相同的用户代理字符串。一对 cookie,user_agent_string 是两个集成函数返回的内容。这意味着无论你将令牌发送到哪个脚本、工具或服务(例如curl或专业抓取工具),在发出HTTP请求时都必须使用提供的用户代理。你必须将该用户代理传递给脚本、工具或服务。


如何使用 Cloudscraper 绕过 Cloudflare

当谈到使用 Cloudscraper 绕过 Cloudflare 的反机器人和 DDoS 保护时,需要做很多工作。然而,你不应该真正关心幕后发生的事情。调用抓取功能并等待收集你需要的数据应该是你唯一关心的问题。以下是有关如何进行操作的一些说明。

1. 导入 Cloudscraper 和所有必需的依赖项,与之前的操作相同。在这里,我们采用 BeautifulSoup 因式分解。

from bs4 import BeautifulSoup

import cloudscraper

2. 之后创建一个Cloudscraper实例,并指定你想要的网站。

scraper = cloudscraper.create_scraper()

url = "http://exampleofyourtargetwebsite.com"

创建 Cloudscraper 实例并定义目标网站后,是时候访问该网站以检索其数据了。

info = scraper.get(url)

print(info.status_code)

soup = BeautifulSoup(info.text, "html.parser")

print(soup.find(class_ = "definetheclass").get_text())

组合后,代码应如下所示:

from bs4 import BeautifulSoup

import cloudscraper

scraper = cloudscraper.create_scraper()

url = "http://exampleofyourtargetwebsite.com"

info = scraper.get(url)

print(info.status_code)

soup = BeautifulSoup(info.text, "html.parser")

print(soup.find(class_ = "classgoeshere").get_text())

这样,你就成功绕过了 Cloudflare 的 DDoS 保护。


Cloudscraper 和 Cloudflare 新版本

关于 Cloudflare,你需要了解的一件事是它经常改变其机器人保护策略。因此,让我们假设你想要从受较新版本的 Cloudflare 保护的网页中抓取数据。如果你使用浏览器访问该网站,该网站会自动引导你前往 Cloudflare 等待区。它将确定你的连接是否安全。

Cloudflare 会接受你的连接并将你定向到原始主页,因为你是从合法浏览器发送请求。但是,如果你使用以下代码使用Cloudscraper访问同一页面,

import cloudscraper

url = " http://exampleofyourtargetwebsite.com"

scraper = cloudscraper.create_scraper()

info = scraper.get(url)

print("the status code is ", info.status_code)

print(info.text)

你会注意到的一件事是你会看到如下错误消息:

cloudscraper.exceptions.CloudflareChallengeError:检测到 Cloudflare 版本 2 挑战,开源(免费)版本中不提供此功能。

上面显示的错误消息意味着 Cloudscraper 有一个可以运行的高级版本。那么,如何解决这个困难呢?你可能会问。由于 Cloudflare 使用各种不断更新的策略来促进机器人检测和阻止,解决此问题的一种方法是模仿真实的用户行为。此外,你可以通过使用有效且适当的 HTTP 请求标头并结合 Selenium 或 Puppeteer 等无头浏览器来实现此目的。但请记住,这些方法都有其缺点,有时会失败。


你需要 Cloudscraper 的原因

过去,营销人员在尝试从动态网页中提取大量数据时遇到了技术挑战。借助 Cloud Scraper 等技术,Web 数据提取变得更加简化。你可以选择使用自己的机器从其他网站提取数据并进行分析。

然而,以下是你需要 Cloudscraper 来抓取受 Cloudflare DDoS 和反机器人保护的网站的一些原因。

捕捉动态内容

为了收集其他抓取工具可能无法访问的动态内容,Cloudscraper 结合了 JavaScript 渲染和浏览器自动化。因此,当你使用 Cloudscraper 时,你一定会抓取你需要的任何动态内容。

隐私

许多人放弃尝试从某些使用 Cloudflare CDN 的网站上抓取内容,因为 Cloudflare 提供的保护很难绕过。不过,Cloudscraper 可以保证你的匿名性和隐私。你的身份受到 Cloudscraper 的保护,它还隐藏你的 IP 地址和设备详细信息。

避免数据泄露

如果你想在使用 Cloudflare 保护防止数据泄露的同时抓取网站,Cloudscraper 就是你需要的程序。为此,你可以修改用户代理和浏览器配置文件。无论你使用什么浏览器或设备,这样做导致原始数据泄露的可能性极低。

你可以与第三方程序集成。

在抓取受保护的网站时,Cloudscraper 的灵活性允许你集成其他程序以提高其性能。多个第三方验证码求解器和代理可用于集成。通过这些技术和 Cloudscraper 的协同工作,你可以完成很多事情。

便于使用

如果配置正确,Cloudscraper 会很容易使用,特别是对于那些对 Python 编程并不陌生的人来说。其简单的 API 与 Python 的 Requests 模块相当。


Cloudscraper 的局限性

虽然 Cloudscraper 做得很好,但它有一个小缺点,我们希望你注意到。它确实有很多漏洞,但以下几个漏洞值得注意:

没有完全匿名

CloudScraper 并不是一个包罗万象的抓取解决方案,因为 Cloudflare 还采用其他抓取工具检测方法(例如 IP 地址分析)来查找抓取工具。对于 Cloudscraper,我们无法保证你完全匿名。但是,你需要使用高质量的代理并定制你的请求,使它们看起来像是来自真实的人,以便在任何形式的可疑情况下抓取受 Cloudflare 保护的网站。

它有错误

Cloudscraper 是一个经常用于自动化和机器人应用程序的 Python 库。它具有构建的文件、宽松的许可证和中等支持。然而,在撰写本文时,Cloudscraper 有超过 14 个错误。我们知道并相信其开发人员正在尝试解决这个问题。

表现

Cloudscraper 可能比其他仅使用 HTTP 请求的抓取解决方案慢,因为它结合了 JavaScript 渲染、浏览器自动化和 HTTP 请求重放。这可能使其不适合需要快速响应或抓取大量数据的用例。

复杂

由于 Cloudscraper 使用 JavaScript 渲染和浏览器自动化,因此它比其他抓取解决方案更难以设置和操作。不熟悉网页抓取或缺乏编程技能的用户可能会发现这很困难。

维护

可能需要更新 Cloudscraper 的代码,以跟上 Cloudflare 对其反机器人防御技术的频繁升级。因此,Cloudscraper 可能无法始终在最新版本的 Cloudflare 安全性下正常运行,并且可能需要维护。


常见问题解答

问:Cloudscraper 也能可靠地绕过 Cloudflare 吗?

事实上,Cloudscraper 在绕过 Cloudflare 的防御方面做得不错。为了获得最佳和最有价值的网络抓取体验,建议你将其与可靠的代理和验证码解算器结合起来。与这些第三方应用程序的集成非常简单且易于执行。

问:使用 Cloudscraper 时出现 403 响应是什么意思?

HTTP 响应状态代码 403 Forbidden 表示服务器理解该请求,但选择不批准它。但是,如果你没有授权,我们建议你首先查看你提交请求的 URL 是否需要任何类型的授权。然而,在第二次或第三次尝试时,你确实会收到答案。有些服务器需要几秒钟才能响应,这意味着浏览器必须等待大约 5 秒钟才能在这些服务器上发送响应。

问:Cloudscraper 是否适用于所有版本的 Cloudflare?

不,Cloudscraper 并不与所有 Cloudflare 版本兼容,尤其是较新的版本。因此,最好了解你的目标网站正在使用的 Cloudflare 版本以及如何使用它。你还可以使用 Cloudscraper 的其他方法来绕过这些更新的 Cloudflare 版本。其中之一是模仿真实的用户行为。


结    论

到现在为止,你应该能够了解 Cloudscraper 的作用以及如何使用它。我们还演示了如何使用 CloudScraper 抓取受 Cloudflare 保护的网页。我们看到,在 Python 中使用 Cloudscraper 绕过旧的 Cloudflare 版本特别有用;但是,可以使用其他库来绕过其更新版本。有鉴于此,我们希望本文能够真正引导你了解 Cloudscraper。

这篇文章有用吗?

点击星号为它评分!

平均评分 / 5. 投票数:

到目前为止还没有投票!成为第一位评论此文章。

No more articles