zh
English
Español
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski CloudScraper 是一个模块,用于自动处理 HTTP 请求,并与 Cloudflare 等应用额外流量验证的网络资源进行交互。CloudScraper 代理可帮助管理连接,为请求设置网络参数,并在检查 IP、标题和客户端行为的网站上保持访问稳定。
CloudScraper 使用 Python 实现,建立在请求库之上。与基本 HTTP 客户端不同的是,它可以通过模拟类似浏览器的行为,自动处理带有 JavaScript 检查点的挑战页面。该模块可添加所需的标头、管理 cookie、跟踪重定向,并能处理常见的保护机制(只要不涉及验证码)。
在实践中,开发人员通常将其用作网络搜刮 API,以简化数据提取流程,同时最大限度地减少 IP 禁止。
使用 CloudScraper 代理,您可以
该库无需启动完整的浏览器即可运行,在某些情况下可取代 Puppeteer 或 Playwright 等无头工具。
Cloudflare 针对自动流量采用了多层保护措施,统称为反僵尸保护。其中包括 JavaScript 挑战、HTTP 重定向、标题检查、cookie 标记和基于 IP 的限制。CloudScraper 可检测验证机制并应用适当的处理策略。
它跨平台,定期更新,兼容 Windows、Linux 和 macOS。它可在虚拟环境和无图形界面的服务器上运行。它还允许开发人员快速集成代理,以实现更好的访问控制和可靠性。
要开始使用,您需要安装 Python 3.6 或更高版本。在 Python 中使用 CloudScraper 非常方便,因为只需一条命令即可连接该模块,并可立即在任何环境中运行。
该工具通过标准 Python 包管理器 pip 安装,它允许从官方 PyPI 代码库下载和更新第三方库。如果使用虚拟环境,请确保在安装前激活虚拟环境。
pip install cloudscraper
在安装过程中,程序库会自动拉入关键依赖项:requests、pyparsing 和 requests-toolbelt。如有必要,可以手动更新:
pip install --upgrade requests pyparsing requests-toolbelt
要验证安装是否正确完成,可以运行以下测试脚本:
import cloudscraper
scraper = cloudscraper.create_scraper()
response = scraper.get("https://www.cloudflare.com")
print(response.status_code)
如果脚本返回状态代码 200、301 或 302,则表示连接成功并收到了服务器的响应。
下面的示例演示了如何使用该模块向受保护页面发送尝试,并指定与 Windows 上 Chrome 浏览器相对应的环境参数。
这对于正确生成标头和增加成功建立会话的机会是必要的:
import cloudscraper
url = "https://example.com/protected"
scraper = cloudscraper.create_scraper(
browser={
'browser': 'chrome',
'platform': 'windows',
'mobile': False
}
)
response = scraper.get(url)
if response.status_code == 200:
print("Access granted.")
print(response.text[:500])
elif response.status_code == 403:
print("Request denied. Check proxy or headers.")
else:
print(f"Response code: {response.status_code}")
根据这些参数,模块会替换适当的 User-Agent 和其他关键标头,从而正确处理挑战并检索页面内容。
如果使用 CloudScraper 代理服务器,它将以标准形式接受其参数,即代理字典,类似于请求库使用的格式。这允许开发人员在多个请求中使用相同的代理,确保一致的 IP 处理和会话稳定性。
执行请求时如何传递代理服务器参数的示例:
proxies = {
'http': 'http://user:pass@proxy.server:port',
'https': 'http://user:pass@proxy.server:port'
}
scraper = cloudscraper.create_scraper()
response = scraper.get(url, proxies=proxies)
在使用按 IP、地区或呼叫频率限制访问的资源时,建议使用 CloudScraper 代理服务器。它们有助于分配负载、模拟来自所需区域的流量并提高访问稳定性。
尽管 CloudScraper 拥有先进的保护互动机制,但它不会自动处理验证码。这适用于交互式 hCaptcha 和图形 reCAPTCHA。该库无法识别其内容,因此无法生成对此类表单的响应。
例如,在检索带有验证码的页面时,模块会返回包含相应元素的 HTML:
<iframe src="https://www.google.com/recaptcha/api2/anchor?...">
在这种情况下,有两种可能的解决方法:
captcha_data = {
'method': 'userrecaptcha',
'googlekey': 'SITE_KEY',
'pageurl': 'https://example.com',
'key': 'API_KEY_ANTICAPTCHA'
} 如果验证码即使在中等请求率的情况下也会出现,那么验证码就有意义了:
在使用受保护资源时,IP 地址的质量是一个关键因素。CloudScraper 的可靠代理(住宅、移动、ISP 或数据中心)有助于降低验证码的可能性,并确保稳定的会话性能。要了解各种代理类型之间的区别以及如何为特定任务选择最佳解决方案,请阅读 本条.
该模块解决了许多与绕过 Cloudflare 相关的任务,但在某些情况下可能需要采用不同的方法--更专业化或针对特定保护条件量身定制。
以下是一些常见的替代方法:
解决方案比较:
| 功能/工具 | CloudScraper | Requests+cookies | Puppeteer | Playwright |
|---|---|---|---|---|
| 实施的复杂性 | 低 | 中型 | 高 | 高 |
| 性能速度 | 高 | 高 | 中型 | 中型 |
| 抗检查 | 中型 | 低 | 高 | 最大 |
| 验证码服务集成 | 是(通过应用程序接口) | 没有 | 是(通过插件/API) | 是(通过插件/API) |
| JavaScript 执行 | 部分 | 没有 | 是 | 是 |
| 资源消耗 | 低 | 低 | 高 | 高 |
即使设置正确,CloudScraper 也会遇到技术问题,但只要了解原因,就能直接诊断和解决这些问题。
在处理请求时,可能会出现一条信息,显示 SSL 证书有问题。这表明证书验证失败,最常见的原因是证书过期或系统日期不正确。
如何解决
scraper.get(url, verify=False)
代码显示了如何通过禁用证书验证来暂时绕过 SSL 验证错误。这对诊断很有用,但长期使用并不安全。
即使浏览器可以访问 URL,服务器仍会以错误 403 拒绝调用。这种情况发生在保护功能将尝试识别为自动尝试时。
如何解决问题
mport cloudscraper
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.199 Safari/537.36',
'Referer': 'https://example.com',
'Accept-Language': 'en-US,en;q=0.9',
'Accept-Encoding': 'gzip, deflate, br'
}
scraper = cloudscraper.create_scraper()
response = scraper.get("https://example.com", headers=headers)
print(response.status_code)
注意:如果通过标头手动设置了 User-Agent,则无需在创建会话时使用浏览器参数,该参数将被覆盖。
您还应该检查正在使用的代理服务器,必要时更改 IP 或选择其他地区的中间服务器。
模块无法处理返回的挑战页面,显示空 HTML 或错误信息。原因 - 库不支持的保护类型(例如,hCaptcha 或 Turnstile)。
如何解决问题
如果仍无济于事,建议改用无头浏览器。
在发送呼叫时,会发现页面之间出现重复重定向。内容无法加载,请求行多次更改,却无法到达目标页面。
在这种情况下,用户会被重定向到验证页面,因为没有完成通过保护。如果在两次尝试之间没有保存 cookie,或者在导航过程中会话丢失,就可能出现这种情况。
解决步骤:
import cloudscraper
scraper = cloudscraper.create_scraper()
response1 = scraper.get("https://example.com/start")
response2 = scraper.get("https://example.com/continue")
print(response2.status_code) import time
import cloudscraper
scraper = cloudscraper.create_scraper()
response1 = scraper.get("https://example.com/start")
time.sleep(2)
response2 = scraper.get("https://example.com/continue") 添加延迟有助于避免服务器因调用频率过高而将流量归类为自动流量的情况。这一点在使用 CloudScraper 代理时尤为重要:延迟可提高会话稳定性,降低触发过滤器的可能性。
有些尝试成功了,而另一些则因连接错误或超时而失败。这往往说明 IP 质量不高。
缓解措施:
通过代理服务器连接时,日志记录有助于跟踪模块的运行情况(请求、状态代码、错误类型)。在 Python 中,可以使用标准日志模块来实现,例如
import logging
import cloudscraper
# basic file logging
logging.basicConfig(
filename="scraper.log",
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)
scraper = cloudscraper.create_scraper()
try:
response = scraper.get("https://example.com")
logging.info(f"Request successful, status: {response.status_code}")
except Exception as e:
logging.error(f"Request error: {e}")
这会生成错误和成功尝试的日志,让您确定哪个 CloudScraper 代理何时失败。
如果代理开始返回 403、超时、SSL 错误等,则应执行 IP 旋转.例如,使用代理池并在出现故障时退到下一个可用服务器:
import cloudscraper
proxies_list = [
"http://user:pass@proxy1:port",
"http://user:pass@proxy2:port",
"http://user:pass@proxy3:port"
]
url = "https://example.com"
scraper = cloudscraper.create_scraper()
for proxy in proxies_list:
try:
response = scraper.get(url, proxies={"http": proxy, "https": proxy}, timeout=10)
if response.status_code == 200:
print("Success via:", proxy)
break
except Exception as e:
print("Error on", proxy, "-", e)
因此,请求会通过代理池中第一个可用的代理执行,这有助于避免出现无法工作的地址。
使用 CloudScraper Proxy 有助于自动调用具有连接级保护的网站。错误通常源于不稳定的代理、高尝试率或验证码。实用的补救措施包括使用可靠的 IP、调整标头和管理请求频率。
不会。CloudScraper 在 HTTP 请求级别运行,不会重现完整的浏览器行为。它可以用标头掩盖自己,但无法模拟用户行为或浏览器指纹。要进行行为驱动检查,请使用 Playwright 或 Puppeteer 等无头工具。
是的。隔离会话、使用代理池并正确处理异常。为每个线程创建一个专用会话。出现连接错误(超时、ProxyError、403 Forbidden、429 Too Many Requests)时,轮换代理。
CloudScraper 非常适合需要快速集成的中小型项目。对于任务关键型高负载系统,可以考虑可扩展性更强的解决方案(如 Playwright)或基于浏览器的定制堆栈。
评论: 0