美文网首页
爬取CCTV央视网《开讲啦》视频

爬取CCTV央视网《开讲啦》视频

作者: 看五年前自己的文章真是唏嘘不已 | 来源:发表于2018-01-29 05:01 被阅读0次

    开始

    目标站点分析

    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)来合并视频,这里又有一个大坑,留给读者自己去发现。

    相关文章

      网友评论

          本文标题:爬取CCTV央视网《开讲啦》视频

          本文链接:https://www.haomeiwen.com/subject/uhqzaxtx.html