真正可⽤的蓝奏云地址解析及下载脚本
蓝奏云的下载链接解析思路并不复杂,但⽹上⼏款真实链接解析⼯具,要么解析出的地址只是跳转链接,要么需要输⼊验证码,⽽蓝奏云⽹页版在使⽤是⼏乎是不会遇上验证码的,这实际上是因为蓝奏云在下载过程中有⼏个⼩坑。
直接上可⽤代码,后⾯再进⾏解释:
def downlanzou(lanzouurl, path, extracode):
sess = requests.session()
sess.headers = {'user-agent':"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}
req = (lanzouurl, verify=False)
sign = re.search(r"action=downprocess&sign=([A-Za-z0-9_-]+?)&p=", ).group(1)
head2 = {
"referer": lanzouurlchrome直接下载
}
req = sess.post("lanzous/ajaxm.php", data={
"action":"downprocess",
"sign":sign,
"p":extracode}, headers=head2, verify=False)
res = req.json()
url = res['dom']+'/file/'+res['url']
filename = res['inf']
os.makedirs(path, exist_ok=True)
headnew = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 OPR/28.0.1750.51", "Accept-Encoding":"gzip, deflate, lzma, sdch", # 重点1
"Accept-Language":"zh-CN,zh;q=0.8", # 重点2
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"# 重点3
}
dreq = (url, headers=headnew, verify=False)
with open(os.path.join(path, filename), 'wb') as f:
f.t)
return filename
关键在于三处重点,即最后⼀次请求⾥必须包含这三个头,虽然⼤多数时候,不带这类头并不会对访问产⽣影响,但笔者实验如果少了这⼏个头,就会被重定向到验证码页⾯,且即便输⼊正确也⽆法跳出。
但如果在Chrome的F12或者Charles⾥查看抓包,是不会看到这⼏个头的,⽽是如下图:
这是因为现在的浏览器基本都⽀持HTTP2标准,请求头⾥出现冒号代表服务器与浏览器协商后,使⽤了HTTP2标准来进⾏通信,但爬⾍常⽤的requests等库都不⽀持HTTP2
虽然我们也可以通过另外的库让Python⽀持HTTP2(hyper库),但并⽆必要,只需要让服务器以HTTP1.1标准⼯作即可。可以下载各浏览器在15年或更早发布的版本,笔者使⽤的是欧朋28.0,再次访问即抓到了适合requests使⽤的请求头。
强制HTTP协议版本的⽅法不总是有效,⽐如天猫就已经开始限制HTTP1.1的使⽤。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。