Python爬取视频之爱情电影及解密TS文件结合多线程!

俗话说,兴趣所在,方能大展拳脚。so结合兴趣的学习才能事半功倍,更加努力专心,apparently本次任务是在视频网站爬取一些好看的小电影,地址不放(狗头保命)只记录过程。

环境 &依赖

  • Win10 64bit
  • IDE:Pycharm
  • Python 3.8
  • Python-site-package:requests + BeautifulSoup + lxml + m3u8 + AES 

在PyCharm中创建一个项目会创建一个临时目录存放环境和所需要的package包,所以要在PyCharm 中项目解释器(Project Interpreter)中添加所有需要的包,这张截图是本项目的包列表,红框中是所必须的包,其他有的包我也不知道做什么用的。

下面开始我们的正餐,爬取数据第一步我们需要解析目标网站,找到我们需要爬取视频的地址,F12打开开发者工具

很不幸,这个网站视频是经过包装采用m3u8视频分段方式加载

科普一下:m3u8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist)。但无论是哪种播放列表,其内部文字使用的都是 utf-8 编码。

当 m3u8 文件作为媒体播放列表(Meida Playlist)时,其内部信息记录的是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源。

OK,本着“没有解决不了的困难“的原则我们继续,依旧在开发者模式,从Elements模式切换到NetWork模式,去掉不需要的数据,我们发现了两个m3u8文件一个key文件和一个ts文件

 

分别点击之后我们可以 看到对应的地址

OK,现在地址已经拿到了,我们可以开始我们的数据下载之路了。

首先进行初始化,包括路径设置,请求头的伪装等,之后我们通过循环去下载所有ts文件,至于如何定义循环的次数我们可以通过将m3u8文件下载之后分析得到所有ts的列表,之后拼接地址然后循环就可以得到所有ts文件了。

第一层

#EXTM3U#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000,RESOLUTION=720x406500kb/hls/index.m3u8

观察数据,不是真正路径,第二层路径在第三行可以看到,结合我们对网站源码分析再次拼接字符串请求:

第二层

#EXT-X-VERSION:3#EXT-X-TARGETDURATION:2#EXT-X-MEDIA-SEQUENCE:0#EXT-X-KEY:METHOD=AES-128,URI="key.key"#EXTINF:2.000000,IsZhMS5924000.ts#EXTINF:2.000000,IsZhMS5924001.ts#EXT-X-ENDLIST

但是问题远远没有这么简单,下载的ts文件无法播放,通过AES方法加密了,所以我们需要去解密,其中m3u8加密方式我们可以在第二层地址下载到的文件中找到:#EXT-X-KEY:METHOD=AES-128,URI="key.key"。采用ASE-128方式。

我们应该庆幸Python强大的模块功能,其中解密我们可以通过下载AES模块实现。

完成之后我们需要将所有ts合并为一个MP4文件,最简单的在CMD命令下我们进入到视频所在路径然后执行:

copy /b *.ts fileName.mp4

需要注意所有TS文件需要按顺序排好。但是在本项目中我们使用os模块直接进行合并和删除临时ts文件操作

最后简单的结合一下多线程加快爬取速度

完整代码:

 

 

 

碰到的问题:

一、一开始以为电脑中Python环境中有模块就OK了,最后发现在Pycharm中自己虚拟的环境中还需要添加对应模块,

二、No module named Crypto.Cipher ,网上看了很多最后通过添加pycryptodome模块解决,电脑环境Win10

三、文件名不能有感叹号,逗号或者空格等这些特殊字符,不然执行合并命令的时候会提示命令不正确

 

你学会了吗   源码获取加群  发文章乱码:1136192749

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值