如何使用python cloudscraper绕过cloudflare
Cloudscraper 是一个用于绕过 Cloudflare 等候室的 Python 库,也称为“我处于攻击模式”(IUAM)。
随着网络犯罪率的上升,Cloudflare 已成为防止机器人程序和不需要的流量的终极网络安全解决方案之一。因此,今天的任何数据提取项目都会在某个时候遇到受 Cloudflare 保护的网站。
虽然此反机器人解决方案为允许的机器人(例如 Googlebot 和其他搜索引擎)保留了一个安全列表,但网络抓取程序通常被识别为不需要的流量。因此,无论您的意图如何,您仍然会被阻止。
在此网络抓取教程中,您将学习如何使用 Cloudscraper 绕过 Cloudflare。我们还将讨论您可能遇到的常见错误以及如何修复它们。
简而言之,这是您需要做的事情:
- 导入 Cloudscraper 和其他依赖项。
- 创建一个 Cloudscraper 实例并定义您的目标网站。
- 访问该网站以检索其数据。
现在,让我们深入了解细节。
Cloudscraper 是什么?
Cloudscraper 是专门为从受 Cloudflare 保护的网站检索数据而构建的抓取库。
尽管 Cloudflare 经常更新以加强其网站保护,但其机器人检测技术之一是测试客户端的 JavaScript 支持。
这就是 Cloudscraper 使用 JavaScript 引擎来解决 JavaScript 挑战并显示为合法浏览器的原因。
你如何在 Python 中使用 Cloudscraper?
Cloudscraper 是在 Requests 中实现的。所以,如果您熟悉这个 HTTP 库,那么使用 Cloudscraper 将毫不费力。
首先,调用其内置函数:create_scraper()。
这将创建一个 Cloudscraper 实例,从该会话对象发送的任何请求都将自动绕过 Cloudflare。如果您的目标网站不受 Cloudflare 保护,它将得到相应处理,无需额外配置。
此外,scraper.get()之于 Cloudscraper 就像request.get()之于 Requests,因为它们以类似的方式工作。
先决条件
首先,您需要Python 3。请记住,某些系统已经预装了它。
之后,安装 Cloudscraper、Requests 和所有必要的库。
pip install requests cloudscraper beautifulsoup4
请求可以绕过 Cloudflare 吗?
Requests 可以说是最流行的 Python 库,下载量超过 1100 万次。它是在 Python 中发送 HTTP 请求的实际工具。
但是,它无法帮助完成此任务。
我们试图抓取Open Sea 的 NFT Collection Stats(一个受 Cloudflare 保护的网页)来向您展示证明。
我们发送了一个 HTTP 请求来访问我们的目标网站。
res = requests.get("https://opensea.io/rankings") print("The status code is ", res.status_code) print(res.text)
但是我们得到了这个结果:
The status code is 403 <!DOCTYPE html> <html lang="en-US"> <head> <title>Access denied</title>
上面的结果显示了一个 403 状态码,这是一个错误页面。此外,Cloudflare 系统将我们重定向到“拒绝访问”页面,而不是 Open Sea 的收藏统计页面。
为了更清楚地理解,我们将响应保存在本地以便在浏览器中查看。
发生这种情况是因为它检测到我们的请求是机器人的请求并阻止了我们。要绕过此 Cloudflare 错误页面,您必须尽可能表现得人性化。
幸运的是,Cloudscraper 可以在一定程度上帮助您实现目标。但稍后会详细介绍。
如何在 Python 中使用 Cloudscraper 绕过 Cloudflare?
绕过 Cloudflare DDoS 保护需要做大量工作。
但是,使用 Cloudscraper,您无需担心幕后发生的事情。相反,您可以调用 scraper 函数并等待几秒钟以获取访问权限。
这是如何做的。
- 导入 Cloudscraper 和其他依赖项 (BeautifulSoup)。
from bs4 import BeautifulSoup import cloudscraper
- 创建一个 Cloudscraper 实例并定义您的目标网站。
scraper = cloudscraper.create_scraper() url = "https://opensea.io/rankings"
- 访问该网站以检索其数据。
info = scraper.get(url) print(info.status_code) soup = BeautifulSoup(info.text, "html.parser") print(soup.find(class_ = "gCpBEX").get_text())
上面的代码块打印请求状态代码和页面标题“Collection stats”元素。因此,通过组合上面的三个代码块,您可以编写完整的脚本。
from bs4 import BeautifulSoup import cloudscraper url = "https://opensea.io/rankings" scraper = cloudscraper.create_scraper() info = scraper.get(url) print(info.status_code) soup = BeautifulSoup(info.text, "html.parser") print(soup.find(class_ = "gCpBEX").get_text())
它带来了以下结果:
200 Collection stats
现在,您已经成功绕过了您的第一个 Cloudflare DDoS 保护。
Cloudscraper 非默认功能
Cloudscraper 有许多非默认功能,您可以将其作为参数传递给内置函数,例如create_scraper()、get_tokens()和get_cookie_string()。
一些例子包括:
- 浏览器/用户代理过滤
- cookie
- 验证码
- 延误
- JavaScript 引擎和解释器
假设您想在显示为移动用户代理时绕过 Cloudflare JavaScript 挑战。
为此,您需要一个 JavaScript 引擎和以下一些参数:
scraper = cloudscraper.create_scraper( interpreter='nodejs', delay=10, browser={ 'browser': 'chrome', 'platform': 'android', 'desktop': False, }, captcha={ 'provider': '2captcha', 'api_key': 'you_2captcha_api_key', }, )
移动和桌面参数默认为“True”,因此如果您只需要另一个,则必须关闭其中一个。
此外,Cloudscraper 有一个受支持的 JavaScript 引擎和第三方验证码求解器的列表。您可以查看PyPI 文档以获取更多详细信息。
Cloudscraper 能否绕过较新的 Cloudflare 版本?
Cloudflare 经常更新其 bot 保护技术,让我们看看 Cloudscraper 如何对抗其更新版本。
对于这个例子,我们将尝试以Author为例,一个使用较新 Cloudflare 版本的网站。
在浏览器上访问该网站后,它会自动将我们重定向到 Cloudflare 等候室。在那里它检查我们的连接是否安全。
由于我们是从实际浏览器发送此请求,Cloudflare 接受我们的连接并将我们重定向到原始主页。
现在,让我们尝试使用 Cloudscraper 访问该网站的内容。
import cloudscraper url = "https://author.today/" scraper = cloudscraper.create_scraper() info = scraper.get(url) print("the status code is ", info.status_code) print(info.text)
它带来了以下结果:
cloudscraper.exceptions.CloudflareChallengeError: Detected a Cloudflare version 2 challenge, This feature is not available in the opensource (free) version.
如您所见,Cloudscraper 不适用于较新的 Cloudflare 版本。
显示的错误消息表明 Cloudscraper 有一个可以使用的付费版本。不幸的是,事实并非如此。
那么,如何解决这个问题呢?
Cloudflare 使用大量经常更新的技术来促进机器人检测和阻止。
也就是说,超越它们的唯一方法是模仿自然的用户行为。您可以借助无头浏览器(如 Selenium 或 Puppeteer)以及 HTTP 请求的有效且正确的标头来实现这一点。
然而,这些方法也有其局限性,并不总是奏效。
什么是好的 Cloudscraper 替代品?
如果您在使用较新的 Cloudflare 版本时遇到问题,那么是时候切换工具了!
ZenRows 是一个功能强大的网络抓取库,可帮助绕过 Cloudflare,无论其更新频繁。
登录后,您将看到 ZenRows 的 Request Builder。现在,执行以下操作。
- 输入您的目标网站 URL 以直接从您的仪表板 UI 中抓取。
- 选择 Python 语言、API 模式,并检查 Antibot 和 JavaScript 渲染(您需要的功能)。
- 单击“尝试”以查看它是否有效。
- 检查显示在页面底部的抓取结果。
这是我们得到的:
虽然我们看到 Cloudscraper 在较新的 Cloudflare 版本上失败,但 ZenRows 成功了。
凭借其直观的 API,您可以轻松绕过反机器人保护并从任何网站提取您需要的信息。
结论
我们看到在 Python 中使用 Cloudscraper 对较旧的 Cloudflare 版本很有帮助,但需要实施不同的库以绕过其较新版本。
此外,您还可以通过使用旨在赢得各种反抓取保护和系统更新的网络抓取 API 来节省时间并降低成本。