之前在知乎看到有人问如何保存知乎回答里的视频,于是想着写个脚本直接根据知乎回答的链接下载该回答里的视频,这样岂不是十分简单方便?(因为我看到那个提问下方的回答操作起来都挺“麻烦”的)
让我们愉快地开始吧~
声明:提供的所有脚本仅供学习交流,禁止用于其他。
开发工具
Python版本:3.6.4
相关模块:
PIL模块;
requests模块;
click模块;
以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
原理简介
首先,请求给定的知乎回答链接,例如:
'https://www.zhihu.com/question/21395276/answer/425130152'
利用正则表达式提取请求结果页面中的视频信息(也就是视频ID,ID数量与该回答中的视频数量一致)。然后,将抓包分析获得的API链接:
https://lens.zhihu.com/api/videos/
与每个视频ID均可组合成一个新的链接地址,例如:
https://lens.zhihu.com/api/videos/xxxxxx
请求该链接地址,即可获得对应视频的下载地址。
另外,需要注意的是,知乎回答里的视频文件使用的是m3u8、ts流格式,即需要通过解析m3u8文件来下载所有的视频传输流文件,然后再将其合并。最简单的方法是使用FFmpeg解析,不过本着学习的目的,我自己也写了个简单的解析类,部分代码截图:
That's all.
完整源代码请自行参考相关文件。
视频演示
在cmd窗口运行"Cmd.py"或"Demo.py"文件即可。
当然相关文件中也提供了打包好的EXE文件,无需配置环境,直接双击运行即可。
更多
相关文件中提供的源代码也是整个项目的源代码,打包好的EXE文件也是对整个项目功能的打包。