绕过cloudflare反bot页面的python模块。

cloudscraper的Python项目详细描述


刮云器

pypi versionlicense:mitimage构建状态捐赠

一个简单的python模块,可以绕过cloudflare的反bot页面(也称为"我处于攻击模式"或iuam),它通过请求实现。CloudFlare会定期更改其技术,因此我会经常更新此回购协议。

如果您希望抓取或爬网受cloudflare保护的网站,这将非常有用。cloudflare的反bot页面目前只检查客户端是否支持javascript,不过它们可能会在将来添加其他技术。

由于cloudflare不断更改和强化其保护页面,cloudscraper需要一个javascript解释器来解决javascript难题。这使得脚本可以轻松地模拟普通的web浏览器,而无需显式地消除和解析cloudflare的javascript。

作为参考,这是CloudFlare用于这些类型页面的默认消息:

Checking your browser before accessing website.com.

This process is automatic. Your browser will redirect to your requested content shortly.

Please allow up to 5 seconds...

使用cloudscraper的任何脚本在首次访问启用cloudflare反bots的任何站点时都将休眠约5秒,但在第一次请求后不会出现延迟。

安装

只需运行pip install cloudscraper。pypi包位于https://pypi.python.org/pypi/cloudscraper/" rel="nofollow">https://pypi.python.org/pypi/cloudscraper/

或者,克隆此存储库并运行python setup.py install

依赖关系

能够在javascript解释器之间进行选择。

  • js2py>;=0.60
  • 脉轮核心
    • 库二进制文件也可以在这里找到。
  • v8
    • 我们用蟒蛇v8eval由索尼开发的模块,编译和安装V8需要10亿年(~90分钟)。
  • node.js

python setup.py install将自动安装python依赖项。除了js2py之外,您决定使用的javascript解释器是安装自己所需的唯一工具。

更新

CloudFlare偶尔会修改他们的反机器人保护页面,到目前为止,平均每年可能会更改一次。

如果您注意到反bot页面已更改,或者此模块突然停止工作,请创建github问题,以便我可以相应地更新代码。

  • 许多问题是由于用户没有更新到该项目的最新版本造成的。在提交问题之前,请运行以下命令:
pip show cloudscraper

如果"版本"字段的值不是最新版本,请运行以下命令更新您的软件包:

pip install cloudscraper -U

如果您仍然遇到问题,请打开一个问题并包括:

  • 完整的异常和堆栈跟踪。
  • 脚本无法处理的受CloudFlare保护的页的URL。
  • 包含受保护页的HTML源的Pastebin或Gist。
  • 来自pip的版本号显示cloudscraper

用法

使用cloudscraper最简单的方法是调用create\u scraper()

importcloudscraperscraper=cloudscraper.create_scraper()# returns a CloudScraper instance# Or: scraper = cloudscraper.CloudScraper()  # CloudScraper inherits from requests.Sessionprintscraper.get("http://somesite.com").content# => "<!DOCTYPE html><html><head>..."

就这样……

从该会话对象向受CloudFlare Anti-Bot保护的网站发出的任何请求都将自动处理。不使用CloudFlare的网站将被正常处理。您不需要进一步配置或调用任何内容,您可以有效地对待所有网站,就好像它们没有受到任何保护一样。

使用cloudscraper的方式与使用请求的方式完全相同。cloudscraper与requestssession对象的工作方式相同,只需调用scraper.get()requests.post()而不是调用scraper.get()scraper.post()

有关详细信息,请参阅请求文档。

选项

现有会话

如果您已经有一个现有的请求会话,可以将其传递到create_scraper()以继续使用该会话。

session=requests.session()scraper=cloudscraper.create_scraper(sess=session)

不幸的是,并不是所有请求的会话属性都容易被转移,所以如果遇到这个问题,您应该用sess=cloudscraper.create撸scraper()替换初始的sess=requests.session()调用


调试

scraper=cloudscraper.create_scraper(debug=True)

scraper=cloudscraper.create_scraper()scraper.debug=True

延迟

通常,当浏览器面对CloudFlare IUAM挑战页面时,CloudFlare要求浏览器在提交挑战答案前等待~5秒。如果一个网站负载很重,有时可能会失败。一种解决方案是增加延迟(可能是10秒或15秒,具体取决于网站)。如果要覆盖此延迟,请将delay关键字参数传递到create撸scraper()cloudscraper()

无需覆盖此延迟,除非CloudScraper生成错误,建议您增加延迟。

scraper=cloudscraper.create_scraper(delay=10)

scraper=cloudscraper.create_scraper()scraper.delay=10

javascript解释器

cloudscraper当前支持以下javascript解释器

默认解释器设置为js2py,您可以通过使用以下值之一定义js2pynodejschakracorev8来设置要使用的参数

Checking your browser before accessing website.com.

This process is automatic. Your browser will redirect to your requested content shortly.

Please allow up to 5 seconds...
0

Checking your browser before accessing website.com.

This process is automatic. Your browser will redirect to your requested content shortly.

Please allow up to 5 seconds...
1

第三方Recaptcha解决方案

cloudscraper目前支持以下第三方recaptcha解决方案(如果您需要的话)(但是您不应该这样做,除非您做了一些超出规范的事情)。

我正在添加更多内容,因此如果您希望添加服务,请在github上提交支持票

抗癫痫
Checking your browser before accessing website.com.

This process is automatic. Your browser will redirect to your requested content shortly.

Please allow up to 5 seconds...
2

Checking your browser before accessing website.com.

This process is automatic. Your browser will redirect to your requested content shortly.

Please allow up to 5 seconds...
3

通过验证码死亡
Checking your browser before accessing website.com.

This process is automatic. Your browser will redirect to your requested content shortly.

Please allow up to 5 seconds...
4

Checking your browser before accessing website.com.

This process is automatic. Your browser will redirect to your requested content shortly.

Please allow up to 5 seconds...
5

2captcha

Checking your browser before accessing website.com.

This process is automatic. Your browser will redirect to your requested content shortly.

Please allow up to 5 seconds...
6

Checking your browser before accessing website.com.

This process is automatic. Your browser will redirect to your requested content shortly.

Please allow up to 5 seconds...
7

返回u响应

如果希望请求响应有效负载而不求解reCAPTCHA,请使用此选项。

Checking your browser before accessing website.com.

This process is automatic. Your browser will redirect to your requested content shortly.

Please allow up to 5 seconds...
8

Checking your browser before accessing website.com.

This process is automatic. Your browser will redirect to your requested content shortly.

Please allow up to 5 seconds...
9
*注意:如果使用代理,并且您希望通过代理将reCAPTCHA解给第三方,请在reCAPTCHA字典中传递'proxy':true,它将使用您设置的scraper会话代理,否则将使用您的默认路由。

Brotli支持

我们在中添加了brotli解压缩支持,默认情况下,只有通过将allow brotli参数设置为false传递到create撸scraper(),才能禁用它。

pip show cloudscraper
0

集成

很容易将cloudscraper与其他应用程序和工具集成。CloudFlare使用两个cookies作为标记:一个用于验证您是否通过了他们的挑战页面,另一个用于跟踪您的会话。要绕过质询页,只需在您发出的所有http请求中包括这两个cookie(带有相应的用户代理)。

要仅检索cookies(作为字典),请使用cloudscraper.get_tokens()。要将它们作为完整的cookiehttp报头检索,请使用cloudscraper.get_cookie_string()

获取令牌获取cookie字符串都接受请求的常用关键字参数(例如获取令牌(url,proxies={"http":"socks5://localhost:9050"}))。

有关详细信息,请阅读请求参数的"请求"文档。


用户代理处理

这两个集成函数返回一个元组(cookie,user_agent_string)

您必须使用相同的用户代理字符串来获取令牌并使用这些令牌发出请求,否则CloudFlare会将您标记为bot。

这意味着您必须将返回的用户代理字符串传递给要将令牌传递给的任何脚本、工具或服务(例如curl或专用的刮片工具),并且它在发出http请求时必须使用传递的用户代理。


集成示例

记住,在检索或使用这些cookie时,必须始终使用同一个用户代理。这些函数都返回一个元组(cookie dict,user_agent_string)


通过代理检索cookie dict

get_tokens是返回包含cloudflare会话cookie的python dict的便利函数。为了演示,我们将配置此请求以使用代理。(请注意,如果您通过代理请求cloudflare清除令牌,则在将这些令牌传递给服务器。CloudFlare要求挑战解决IP和访客IP保持不变。)

如果不希望使用代理,请不要传递proxies关键字参数。这些便利函数支持所有请求的常规关键字参数,如paramsdata,以及headers

pip show cloudscraper
1

检索cookie字符串

获取cookie字符串是一个方便的函数,用于将令牌作为字符串返回,以用作http头值。

当手动创建一个http请求,或使用传递原始cookie头的外部应用程序或库时,这非常有用。

pip show cloudscraper
2

卷曲示例

下面是一个将cloudscraper与curl集成的示例。如您所见,您只需将cookies和用户代理传递给curl即可。

pip show cloudscraper
3

精简版本。通过curl打印受cloudflare保护的任何站点的页面内容。

警告:shell=true在实际代码中与子流程一起使用可能很危险。

pip show cloudscraper
4

捐款

如果你想表达你对这个项目的爱和/或欣赏,那就喊我一杯咖啡或啤酒吧:)

请给我买杯咖啡

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在读取属性文件时获取空指针   java NoSuchMethodError:org。springframework。靴子网状物servlet。错误错误控制器。最新SpringCloudStarter NetflixZuul中的getErrorPath()   java Spring不使用相同的JDBC连接   sqlite DB中带方括号的java数据   如何编译基于Maven的Java项目以从命令行运行它   java如何限制cowndown计时器的操作(例如登录)   java如何使用spring和springboot应用程序配置数据库?我想知道如何回答这类问题?   java中的buildpath不支持java。图书馆路径   java如何使用条目集在树映射上迭代?   java如何将IndexOf与Scanner结合使用?   xml Java SAX解析器进程监视   java在多台远程机器上运行并行junit测试   当我尝试在ListView中动态添加项时,单击按钮时java崩溃