注意:本程序由于要使用windows的命令行,只在windows上测试通过。如果是Linux平台,将代码中windows的命令行部分换成相应的Linux命令就行。
提示:大家可以先看博客https://blog.youkuaiyun.com/liujiayu2/article/details/86083400。 获取m3u8的基础知识。如果对FNN网站感兴趣,可以使用上面博文的方法对FNN网站的m3u8文件进行分析。FNN上的m3u8一般有3个。我们只需要获取主m3u8(main_m3u8),然后解析main_m3u8文件,可以获得视频video_m3u8和音频audio_m3u8另外两个m3u8文件。
一、任务目标
输入:FNN网站的URL,例如https://www.fnn.jp/articles/-/210727
输出:对应网页的mp4视频
二、m3u8视频抓取基本思路
1.使用webdriver模拟chrome浏览器访问指定的URL。
2.在访问的过程中,利用browsermobproxy进行抓包,并获得视频的主m3u8(main_m3u8).
3.分析main_m3u8,获得视频video_m3u8和音频audio_m3u8。
4.分析视频video_m3u8和音频audio_m3u8,下载多个视频和多个音频。
5.使用openssl和视频video_m3u8和音频audio_m3u8中的key和IV对每个视频和音频进行解密。
6.使用windows命令行对多个解密的视频进行合成。
7.使用windows命令行对多个解密的音频进行合成。
8.使用ffmpeg对音频文件和视频文件进行合成。
三、一些坑
1.安装browsermobproxy时,需要安装JAVA,我安装的是jdk-10.0.2。注意要将环境变量添加到系统。
2.安装browsermobproxy时,不仅需要pip install,还需要在电脑上存放browsermob-proxy-2.1.4文件夹。具体安装可以自行百度。
3.安装browsermobproxy时,需要将证书导入chrome浏览器中,不然chrome会罢工。我采用的是公用证书,在网上自己找的。你也可以自行百度,如果百度不了。可以给我发邮件(heguannan@163.com),我将证书发送给你。你导入到chrome中就行了。
4.使用webdriver,获取网页中的元素时,要注意find_element_by_??和find_elements_by_??。注意一个是element,是单数。一个是elements,是复数。当寻找的元素有多个符合要求的时候,一定要使用复数形式,这样会返回一个list。
5.我将ffmpeg加入到环境变量中,在命令行中直接调用ffmpeg有问题。因此,本代码是将ffmpeg的完整路径写了下来,并调用。
6.注意windows的路径中的’\’和python中的转义符冲突,要使用’\\’来表示’\’。具体查看代码。
7.使用Tkinter进行界面编程时,如果一个按钮的作用是执行一大段代码,比如本程序中的爬虫,会造成主界面未响应,这时候可以使用多线程解决。
四、代码