利用python批量爬取央视视频链接

目标网页:https://v.cctv.com/sousuo/index.shtml?title=%E6%96%B0%E5%86%A0

v2-e778d8d4422d54f240453da6cfbd3327_b.jpg

第一次尝试:F12抓包当前网页

结果……发现这里没有视频数据,只有这12个视频的介绍

v2-3908b616df53358b019a435082f19c53_b.jpg

===================我是漂亮的分割线=====================

打开第一个视频看看,一样F12抓包

可以着重观察包的Type和Size,size越大越有可能是视频文件

v2-93bcf21446bb35d6ef0c119f2bc09c11_b.jpg

找到了m3u8目录文件和ts视频文件,m3u8目录文件用来指向ts视频文件

M3U8是什么​www.jianshu.com
v2-ce58257014e74cac8874ba49443a8aed_180x120.jpg
TS文件_百度百科​baike.baidu.com
v2-a64774de231eee7f3449f6649c9cdaef_180x120.jpg

===================我是漂亮的分割线=====================

先看m3u8

过滤一下结果,只有三个文件,打开三个文件发现都没有加密(减少了工作量,开心)

加密会有关键字‘key’,类似这样(#EXT-X-KEY:METHOD=AES-128,URI="video.key")
  1. 第一个是main.m3u8顶流适配(多码率适配)
  2. 第二个和第三都是二级适配(单码率适配)
  3. M3U8格式讲解及实际应用分析 - 栴檀 - 博客园

m3u8顶流适配的作用是跳转其他m3u8的地址,用来请求不同分辨率的ts文件

Header
Request URL: https://hls.cntv.lxdns.com/asp/hls/main/0303000a/3/default/90b9b0a51ed6428986603865a7566777/main.m3u8?maxbr=2048

v2-e12baca1641dd7ff50af1a76da998643_b.jpg

再来看看二级适配 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

v2-94909c3521876db4069f24e34d1062cf_b.jpg

===================我是漂亮的分割线=====================

虽然本次不涉及ts文件的下载,但还是看看ts文件格式

这里有两个0.ts两个ts传回来的视频文件分辨率不一样,第一个0.ts是自动适配后2000.m3u8指向的ts文件第二个0.ts是自动适配后1200.m3u8指向的ts文件

v2-0b09f8d13c75453cfc9fa3336ba4241e_b.jpg
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 downloader​blog.luckly-mjw.cn

v2-07d884d6eade11f44c0652748d30ed88_b.jpg

v2-f36558ac8ed33a6f200acefccc036ea9_b.jpg

可以下载,没问题

但是这不是我们要的,我们是要批量获取300多个视频的m3u8链接……

===================我是漂亮的分割线=====================

假设现在有300个视频链接要爬

现在的思路是:请求300次视频链接,抓300多个m3u8包

请求视频链接就给pyautogui(解放双手),抓包交给charles(青花瓷抓包工具)

  1. 第一步打开charles抓包工具,这里我用mian.m3u8进行过滤,因为顶级适配的请求速度最快

我点击了2个视频这里看到的就是2个视频的m3u8地址

v2-08bb14f73194c09f0325ce36086af473_b.jpg

2. 第二步pyautogui这个就要看目标页面去计算鼠标点击的位置让鼠标点300次,请求300个页面链接,每个页面要有大概5-10s的停留让服务器有足够的时间完成请求

burning:PyAutoGUI——图形用户界面自动化​zhuanlan.zhihu.com
v2-b279ed29f9647b19d43cac1b1c71e5ae_180x120.jpg

v2-dc67bb3c12c5db74f4c10e9fbd3e0285_b.jpg
代码太多就不放出来了,就基本上就是点这里点那里:(

第三步,使用charles导出成需要的格式,这里我导出csv

v2-d14267dc62033fb2d57aa859e15ab45f_b.jpg

第四步,请求单码率适配的m3u8

这里我先将main.m3u8用转档工具将其转成成json下载,然后用正则修改地址为单码率的地址,就ok了

在线Excel转JSON工具 - UU在线工具​uutool.cn
v2-9641db6ce08a80eea93ffc7a5a00e5fd_ipico.jpg
import 

v2-328b61befe3625a54652b5ce7a0d63f5_b.jpg

成功了300多条视频链接获取成功。

Peace out!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐