python数据处理——攻破cookies之cf_clearance

可能很多小伙伴在做网站爬虫的时候,会遇到这样一种情况,在设置requests的header的时候,只设置User-Agent字段的时候,返回的结果是503,这时候的话,首先第一步要做的是看一看是不是自己之前太狂了,爬页面时候没加个延时,被对方主机干掉了,一般这种也不是永久性的。

但是如果确定不是这种原因而是第一次就不行的话,那就可能是要用到本文提到的这个攻破cf_clearance的工具了。

首先呢,这个字段的由来出于此保护机制:cloudflare,当然就是进行人机校验的工具。很多网站都会用。

笔者毕业设计做的是数字货币的交易研究,在爬取这个网站遇到了它的阻挠,之前采取的办法是每天都复制粘贴一下Requests的cookies的内容,放到我爬虫的header里面,可想而知很麻烦。

经过笔者检验,在cookies的所有字段中,__cfduid;_session_id;cf_clearance这三个字段是必要的,其他都可以没有。

session_id比较容易,回话的id一般是在第一次进入该网站时候生成,只要我们的爬虫在本地保持就可以了,具体的操作方法可以是:第二次访问就自动保持了session_id,而另外两个字段则需要用该工具

s = req.session()
res = s.get(url,headers = header)

data = s.get(url_new,headers = header2)

 安装好之后,按照教程里的,使用如下的代码:

import subprocess
import cfscrape

# With get_tokens() cookie dict:

# tokens, user_agent = cfscrape.get_tokens("http://somesite.com")
# cookie_arg = "cf_clearance=%s; __cfduid=%s" % (tokens["cf_clearance"], tokens["__cfduid"])

# With get_cookie_string() cookie header; recommended for curl and similar external applications:

cookie_arg, user_agent = cfscrape.get_cookie_string("http://somesite.com")

# With a custom user-agent string you can optionally provide:

# ua = "Scraping Bot"
# cookie_arg, user_agent = cfscrape.get_cookie_string("http://somesite.com", user_agent=ua)

result = subprocess.check_output(["curl", "--cookie", cookie_arg, "-A", user_agent, "http://somesite.com"])

 

其中cookie_arg就是拿到了上面两个字段的变量: