开始
目标站点分析
html.PNG我们的目标是找到视频的真实下载地址,一般以.mp4结尾。
首先打开f12工具,发现src和flashvars两个属性可能包含视频下载地址。
下载src文件,用python打开,结果是一堆我看不明白的代码...好吧,先放过你
再看flashvars,百度后知道这是向flash player传递的参数,对了,这个视频是调用我flash player插件播放的。也许这里面会有。然后我一个个参数看过去,结果都不是。
再看network,结果我翻遍了所有的包都没找到...没招了,怎么办?
到底藏哪儿了呢?
他山之石,可以攻玉
我去搜了一下其他视频网站的python爬虫教程,知道了还有一种方法是抓手机端app的数据包,那就试一下吧。
我用的是anyproxy抓包,熟悉fiddler或者其他抓包工具的应该也可以用其他的工具。但是我开启fiddler代理之后,app不能访问网络,不知道怎么回事,有知道的跟我说一下吧。
自行百度anyproxy抓包,我就不介绍了。
http://anyproxy.io/c
配置好之后,进入nodejs的bin目录下,命令行输入anyproxy -i,在浏览器地址中输入‘localhost:8002’,你就会看到下面这个页面。这就是一个个数据包了。
手机下载央视影音app,搜索《开讲啦》,播放一个视频,在播放一个视频前先清空之前抓到的包,不然几百个包能找累死。接下来我就发现了这个包。
anyproxy.PNG
终于找到你,我的mp4!
再看request
reqeust.PNG
request url中有几个参数,pid,uid,tsp,vc后面的大概是固定不变的
这个pid可能是指product ID,uid可能是指user id,tsp看样子应该是个时间戳。但是这个vc是什么鬼?难道是传说中的url加密参数?可是我不会解密啊。
然后我就去翻前面的包,可只找到uid,vc和pid都没找到。
那怎么办?没有这些参数怎么构建request url?不要这些参数行不行?我的脑海中浮现了一个大胆的想法。
我先删掉了tsp,内容没变
再删vc,内容也没变
再删uid,内容还没变
还有这pid,走你
404...
好吧,产品id还是要的,不然对方怎么知道我要哪个视频
那pid从哪儿找?还有什么地方没找过?
网页版的html!
我把pid参数复制过去一搜,hiahiahia,不要躲了,我看见你了。
思路
经过上面的分析,思路就很清晰了。
获取视频页面的html,找到pid→拼接成app接口的request url,获得返回数据→解析返回的数据,把视频的真实下载地址取出来→下载
实现
我直接贴github地址好了
https://github.com/johnson329/cntv_crawler
后记
在实现的过程中还是有不少坑的。这里列举一些
1、配置anyproxy需要下载一个证书到手机上,但是我的小米手机一点证书文件就卡住了,在设置里面添加文件解决了
2、得到的视频下载地址有很多,有的后缀是一样的,点开之后对比发现,有些是高清,有些是标清。而且视频是分段的,每段只有几分钟,需要再下载一个工具叫FFmpeg然后调用os.system(cmd)来合并视频,这里又有一个大坑,留给读者自己去发现。
网友评论