python hls m3u8_利用python批量爬取央视视频链接
利用python批量爬取央视视频链接
目标网页:https://v.cctv.com/sousuo/index.shtml?title=%E6%96%B0%E5%86%A0
第一次尝试:F12抓包当前网页
结果……发现这里没有视频数据,只有这12个视频的介绍
===================我是漂亮的分割线=====================
打开第一个视频看看,一样F12抓包
可以着重观察包的Type和Size,size越大越有可能是视频文件
找到了m3u8目录文件和ts视频文件,m3u8目录文件用来指向ts视频文件
M3U8是什么www.jianshu.com
===================我是漂亮的分割线=====================
先看m3u8
过滤一下结果,只有三个文件,打开三个文件发现都没有加密(减少了工作量,开心)
加密会有关键字‘key’,类似这样(#EXT-X-KEY:METHOD=AES-128,URI="video.key")
- 第一个是main.m3u8顶流适配(多码率适配)
- 第二个和第三都是二级适配(单码率适配)
- M3U8格式讲解及实际应用分析 - 栴檀 - 博客园
m3u8顶流适配的作用是跳转其他m3u8的地址,用来请求不同分辨率的ts文件
Header
Request URL: https://hls.cntv.lxdns.com/asp/hls/main/0303000a/3/default/90b9b0a51ed6428986603865a7566777/main.m3u8?maxbr=2048
再来看看二级适配 2000.m3u8 和 1200.m3u8可以看到reponse里面有都ts文件的相对路径
Header
2000.m3u8
Request URL: https://hls.cntv.lxdns.com/asp/hls/2000/0303000a/3/default/90b9b0a51ed6428986603865a7566777/2000.m3u8
1200.m3u8
Request URL: https://hls.cntv.lxdns.com/asp/hls/1200/0303000a/3/default/90b9b0a51ed6428986603865a7566777/1200.m3u8
===================我是漂亮的分割线=====================
虽然本次不涉及ts文件的下载,但还是看看ts文件格式
这里有两个0.ts两个ts传回来的视频文件分辨率不一样,第一个0.ts是自动适配后2000.m3u8指向的ts文件第二个0.ts是自动适配后1200.m3u8指向的ts文件
Header
第一个0.ts
Request URL: https://hls.cntv.lxdns.com/asp/hls/2000/0303000a/3/default/90b9b0a51ed6428986603865a7566777/0.ts
第二个0.ts
Request URL: https://hls.cntv.lxdns.com/asp/hls/1200/0303000a/3/default/90b9b0a51ed6428986603865a7566777/0.ts
ts路径和m3u8路径之间的关联
0.ts
Request URL: https://hls.cntv.lxdns.com/asp/hls/1200/0303000a/3/default/90b9b0a51ed6428986603865a7566777/0.ts
1200.m3u8
Request URL: https://hls.cntv.lxdns.com/asp/hls/1200/0303000a/3/default/90b9b0a51ed6428986603865a7566777/1200.m3u8
可以看到就后缀改掉了而已
===================我是漂亮的分割线=====================
如果单个视频下载的话,可以直接用视频提取器就行了
我们选择2000.m3u8这个用在线m3u8转档器来看看
m3u8 downloaderblog.luckly-mjw.cn
可以下载,没问题
但是这不是我们要的,我们是要批量获取300多个视频的m3u8链接……
===================我是漂亮的分割线=====================
假设现在有300个视频链接要爬
现在的思路是:请求300次视频链接,抓300多个m3u8包
请求视频链接就给pyautogui(解放双手),抓包交给charles(青花瓷抓包工具)
- 第一步打开charles抓包工具,这里我用mian.m3u8进行过滤,因为顶级适配的请求速度最快
我点击了2个视频这里看到的就是2个视频的m3u8地址
2. 第二步pyautogui这个就要看目标页面去计算鼠标点击的位置让鼠标点300次,请求300个页面链接,每个页面要有大概5-10s的停留让服务器有足够的时间完成请求
burning:PyAutoGUI——图形用户界面自动化zhuanlan.zhihu.com
代码太多就不放出来了,就基本上就是点这里点那里:(
第三步,使用charles导出成需要的格式,这里我导出csv
第四步,请求单码率适配的m3u8
这里我先将main.m3u8用转档工具将其转成成json下载,然后用正则修改地址为单码率的地址,就ok了
在线Excel转JSON工具 - UU在线工具uutool.cn
import
成功了300多条视频链接获取成功。
Peace out!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)