文章目录
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771
一、项目概述
1.项目背景
有一天,我突然想找点事做,想起一直想学但是没有学的C语言,就决定来学一下。
可是怎么学呢?看书的话太无聊,报班学呢又快吃土了没钱,不如去B站看看?
果然,关键字C语言搜索,出现了很多C语言的讲课视频:
2.环境配置
这次项目不需要太多的环境配置,最主要的是有ffmpeg(一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序)并设置环境变量就可以了。ffmpeg主要是用于将下载下来的视频和音频进行合并形成完整的视频。
下载ffmpeg
可点击https://download.csdn.net/download/CUFEECR/12234789或进入官网http://ffmpeg.org/download.html进行下载,并解压到你想保存的目录。
设置环境变量
- 复制ffmpeg的bin路径,如
xxx\ffmpeg-20190921-ba24b24-win64-shared\bin
- 此电脑右键点击属性,进入控制面板\系统和安全\系统
- 点击高级系统设置→进入系统属性弹窗→点击环境变量→进入环境变量弹窗→选择系统变量下的Path→点击编辑点击→进入编辑环境变量弹窗
- 点击新建→粘贴之前复制的bin路径
- 点击确定,逐步保存退出
动态操作示例如下:
除了ffmpeg,还需要安装pyinstaller库用于程序打包。
可用以下命令进行安装:
如果遇到安装失败或下载速度较慢,可换源:
二、项目实施
1.导入需要的库
导入的库包括用于爬取和解析网页的库,还包括创建线程池的库和进行其他处理的库,大多数都是Python自带的,如有未安装的库,可使用pip install xxx
命令进行安装。
2.设置请求参数
设置请求头等参数,减少被反爬的可能。
3.基本处理
主要包括两方面的基本处理,为正式爬取下载做准备:
- 利用正则表达式提取信息
通过requests库请求得到请求后的网页,属于文本,通过正则表达式提取得到关于将要下载的视频的有用信息,便于后一步处理。 - 文件处理
将下载视频完成后的相关文件进行处理,包括删除生成的临时的音视频分离的文件和移动最终视频文件到指定文件夹。
4.下载视频
这部分包括系列视频的批量下载和单个视频的下载,两者的大体实现原理近似,但是由于两个函数的参数有差别,因此分别实现。
在具体的实现中,首先更新请求头,请求视频链接并保存视频(无声音),再请求音频链接并保存音频,在这个过程中得到相应的视频和音频文件的大小。
5.视频和音频合并成完整的视频
这个过程也是批量和单个分开,大致原理差不多,都是调用subprogress模块生成子进程,Popen类来执行shell命令,由于已经将ffmpeg加入环境变量,所以shell命令可以直接调用ffmpeg来合并音视频。
6.3种下载方式的分别实现
在一般情形下,下载的需求包含3种情况:
- 单个视频的下载
只有一个视频,没有和它属于同一个系列的其他视频,如下图
- 多个视频的下载
这里,多个视频之间是没有关系的,多个视频的下载实际上是先获取到所有的aid,并进行循环,对每个视频链接传入参数调用单个视频下载的函数即可。同时设立线程池,大小为3,既不会对资源有太大的要求,也能实现多任务、提高下载效率。 - 系列视频的下载
此时,多个视频属于同一系列,如https://www.bilibili.com/video/av91748877是一个课程系列,如下
7.主函数
主函数中实现3种下载方式对应的函数的分别调用。
三、项目分析和说明
1.结果测试
对3种方式进行测试的效果如下:
改进说明
B站网站也一直在变化,所以对于下载可能也会有一些变化,所以将改进的地方在下面列举出来:
- 网址参数变化
举例说明:
这段时间发现B站一个视频系列的链接变成https://www.bilibili.com/video/BV1x7411M74h?p=65,即是无规律的字符串(可能是经过某种算法编码或加密得到的),现在从链接中不能得到视频(系列)的aid,这时候可以借助浏览器工具抓包查看数据来找到该视频的aid,如下:
2.软件打包
在命令行中,使路径位于代码所在路径运行
打印
出现INFO: Building EXE from EXE-00.toc completed successfully. 即打包成功。
在当前路径下找到dist或build目录下的bilibili_downloader_1目录下的bilibili_downloader_1.exe,即是打包后的软件。
点击打开即可进行选择和输入,开始下载相应视频。
测试示例如下:
3.改进分析
该项目是小编进行B站视频下载的首次尝试,难免有很多不足,在实现的过程中和后期的总结中,可以看出还存在一些问题:
- 还不能下载B站上的所有视频,目前局限于各种普通视频教程,不能下载直播视频、大会员番剧等,可以在后期进一步优化;
- 代码过于繁琐,有不少功能类似的重复代码,可以进一步简化、提高代码的复用性;
- 没有采取适当的措施应对B站的反爬,可能会因为请求过多而无法正常下载。
可以在后期进行优化,使整个程序更加健壮。
4.合法性说明
- 本项目的出发点是方便地下载B站上的学习视频,可以更好地学习各类教程,这对程序猿来说也是一种福利,但是绝不用与其他商业目的,所有读者可以参考执行思路和程序代码,但不能用于恶意和非法目的(恶意频繁下载视频、非法盈利等),如有违者请自行负责。
- 本项目在实施的过程中可能参考了其他大佬的实现思路,如有侵犯他人利益,请联系更改或删除。
- 本项目是B站视频批量下载系列的第一篇,有很多尚待改进的地方,后期会继续更新,欢迎各位读者交流指正,以期不断改进。