蓝奏云盘爬虫

解析出直链后通过调用wget进行下载
源代码

社区上次的活动视频被发到了蓝奏云上

上去看了下发现被分卷压缩分成了100多个文件:(
还好这个网盘不限速

为了方便只能用python批量下载了

蓝奏网站官网
网盘分享链接

抓包分析

获取各个文件地址

打开f12 调试工具 提交一次

提交
可以看到密码是pwd变量

通过查看response 可以看到 文件下载地址与文件名字以json方式返回

返回值
查看源代码发现各项参数被写的整整齐齐。。。。。。。。。

抓包1
接下来可以用正则表达式 抓取变量

用request模拟post一下 获得返回的json表

对json用正则解析可以得到名字和链接的对应关系

pg控制文件显示的页数 每一页最多显示50个链接

1
2
3
4
5
6
7
line=re.compile("\"id\":\"(.*?)\"")
downlines=re.findall(line,text_str.text)
urls=[]
for tmp in downlines:
urls.append("https://www.lanzous.com/"+tmp)
names=re.findall(r"\"name_all\":\"(.*?)\",",text_str.text)
namestourls=dict(zip(urls,names))

获取下载地址

点进链接以后可以发现
有三个选项可以下载 打开f12抓包可以看到ajaxm.php返回了三个链接对应的下载链接

三个下载选项竟然都是同一个下载链接。。。。。思路非常优秀

继续查看源代码
可以发现参数接口依旧被写的整整齐齐。。。。。

ajaxm.php
继续模拟post 然后用正则提取下载地址

可以得到真实的下载地址

下载地址

反反爬虫

获取下载地址是
需要添加data中的referer 告诉服务器你来自于上个链接

这个网站不同于别的网站返回404
而是会返回一个无法正确下载的链接
在下载的时候他的服务器会检测是否有dataaccept-language是否正常

在一开始我是完全没发现这个。。。
使用了selenium来完成下载动作

如果正常不会跳转到正确的下载页面

使用wget 进行下载

通过subprocess模块调用wget进行下载

data中的数据 换成字符串添加进wget参数中进行下载

刚开始会提示一下错误

1
/bin/sh: 1: Syntax error: "(" unexpected

google无果后尝试去掉文件名后正常 经过排查发现是python中调用shell运行不能有括号

1
2
3
4
5
6
shell_str=shell_str+" "+down_url+" -O "+re.sub(r"(\(.*?\))","",namestourls[url].decode("unicode-escape"))+" -q"
###删除括号 以及括号内中文
shell_str=shell_str.encode('utf8')
print namestourls[url].decode("unicode-escape"),"开始下载"
subprocess.call(shell_str,shell =True)
print namestourls[url].decode("unicode-escape"),"下载完毕"

通过正则表达式去掉括号

然后调用wget进行下载

这个云盘没有限速 所以并不用进行多线程下载

下载链接