教你破解cloudflare金盾5秒顺利爬取网站内容的方法

现在网站多多少少都有ddos防护上cdn,不然裸着谁敢开网站啊。cloudflare作为cdn届的大佬,我们国内能和他相提并论的也只有百度云加速这一家了,但是百度云加速(su.baidu.com)有明显的劣势:需要备案;免费版不支持https。所以导致大批用户转投cloudflare(简称CF,下同)的怀抱。CF有一个非常有名的金盾5秒,随着攻击普遍增加(现在发起cc攻击成本越来越低),金盾5秒也越来越频繁的出现在我们眼前。魔高一尺,道高一丈,防御升级的同时,总有撕开防御口子的方法,这就是一场永无止尽的攻防战。

cloudflare-scrape介绍

cloudflare-scrape是一个简单的Python模块,用于绕过Cloudflare的反机器人页面(国内称作金盾5秒),以顺利抓取Cloudflare保护的网站内容。 Cloudflare会定期更改其技术,cloudflare-scrape也会相应升级程序。

安装

安装cloudflare-scrape非常简单,只需要安装python的cfscrape模块和node.js程序。

安装cfscrape模块

pip install cfscrape

如果报错:AttributeError: ‘module’ object has no attribute ‘X509_up_ref’,请先执行如下命令,然后再执行上述命令

pip uninstall pyOpenSSL
pip install pyOpenSSL

安装node.js

确保nodejs的版本在4.5或以上,不然会报错。查看nodejs版本方法为:node -v

#Ubuntu / Debian
apt-get install nodejs -y
#CentOS
yum install nodejs -y

使用

新建一个test.py文件,请熟悉vim编辑器的命令:i为编辑,Ese为进入命令模式,:wq为保存并退出

cd ~
vim test.py

在文件test.py里写入下面内容,将第四行中的http://somesite.com改为你的目标地址。

import cfscrape
scraper = cfscrape.create_scraper()
# Or: scraper = cfscrape.CloudflareScraper()
print scraper.get("http://somesite.com").content

下面开始执行,就能看到网站内容在屏幕上滚动出来了。

python test.py

如果需要将抓取的内容保存到本地,修改一下上述代码即可

import cfscrape
scraper = cfscrape.create_scraper()
# Or: scraper = cfscrape.CloudflareScraper()
content = scraper.get("http://somesite.com").content
with open("/root/test.html","w") as f:
f.write(content)

再次运行python test.py后,就能在/root目录下看到名为test.html的文件,里面保存的就是公益站的源码了。博主是因为要爬取ssr账号,无奈对方网站开了CF金盾,就这能用这个方法了。

升级

因为CF的金盾在不断升级,cloudflare-scrape也要做相应的调整升级保证程序可用性。cf-scrape升级方法很简单

pip install -U cfscrape

其他

  1. CF金盾会检测客户端是否支持JavaScript,安装nodejs的目的就在此。
  2. CF金盾常规方法是使用JavaScript检测页面,这个使用cfscrape就能解决。CF金盾偶尔也会使用reCAPTCHA(谷歌验证码)来进行检测,那就算你倒霉。