在看B站视频的时候,常常想把自己喜欢的一些视频保存到电脑本地,方便以后离线看。而PC网页端的视频又不支持缓存功能。于是就去网上找了几个方法,大都是通过安装软件或者去别的网页然后输入B站链接进行下载的,方便倒挺方便,但是稳定性并不是很好。并且身为程序员的自己并不希望借助第三方工具来做这个事情,于是找到了一个可以用Python来实现的方法。
前言
假设能看到这个博客的小伙伴都是学习过计算机语言的,那么这个利用Python去下载B站视频的方法绝对是最适合自己的,否则再去付出一些学习的成本就显得有点麻烦了。 接下来就给大家介绍一下这个方法。 Python的第三库中,有一个you-get的小型命令行程序。用它就可以在Web端(网页上)通过链接下载一些媒体内容,比如像视频,音频,图片。故这次下载B站视频的方法就是基于这个Python的you-get包的。
具体使用步骤
安装Python
以下的所有步骤都是以搭建好了Python环境为前提的,Python环境的搭建也很简单,安装一个Python的安装包即可。 附上菜鸟教程的安装说明:www.runoob.com/python/pyth…
安装you-get包
和其他的第三方包一样,都是借助pip install xxx(不同操作系统和不同版本的Python可能稍有不同)命令在命令行窗口中下载该模块。
如图:
因为我是之前就安装好了的,所以这里就没有显示安装的过程,直接提示了我已经安装了这个工具包了。如果第一次安装会有下载的进度条的,等到看到successfully的提示,说明安装成功了。
命令行运行you-get小程序
前文提到过这个you-get是个小型命令行程序,故在安装了之后,是可以在命令行中直接用的。 命令如下:
you-get -o 存储路径 视频地址(链接)
点击Enter运行如图所示:
命令简要说明
示例:
you-get -o E:\视频 https://www.bilibili.com/video/BV1na4y1s77U?spm_id_from=333.851.b_7265706f7274466972737431.15
- you-get -o 是固定格式
- E:\视频 下载到本地的目标路径
- www.bilibili.com/video/…… 后面这个链接就是B站的视频链接啦,如下
注意命令中的空格。 并且,下载完成后,会有两个文件,是因为B的视频含有弹幕,所以会将弹幕文件也一起下载下来。
故只要安装了Python、you-get的包,就可以在命令行中直接输入命令下载自己想要的视频了。快去试一下吧!
包装成py脚本运行
用命令行只需要一行命令就能完成这个下载操作,但每下载一个视频都要去输入命令还很容易就不小心输错,就很麻烦。 那就把这个命令放到py脚本文件中,让它帮我们去跑这个命令。
py脚本执行命令
在任何一个能跑Python程序的IDE中,编写如下的示例代码。
import os
os.system('you-get -o E:\\视频 https://www.bilibili.com/video/BV1na4y1s77U?spm_id_from=333.851.b_7265706f7274466972737431.15')
其实原理很简单,就是将命令行交给py程序来帮我们执行了,下次我们想下载时,直接把链接换掉,点击运行即可。效果与命令行一模一样,下次再下载视频直接把链接一换再运行就可以啦。
Pycharm运行示例
比如用PyCharm运行结果如下,会直接打开电脑的命令行窗口显示下载内容:
VSCode运行示例
注意
仔细观察单引号中的命令和之前再命令行中写的命令有什么不同,前面在命令行中写的是E:\视频,而py文件单引号中的路径却是\\。所以如果写存储路径时,原本是一个斜杠的时候一定要用双斜杠,这个原因程序员小伙伴肯定知道为什么。对于不懂的小伙伴只需要稍加注意就行了。
多选集视频下载
很多时候B站的视频链接并不只包含一个视频,比如某些分集的视频。这个时候再用上面这个命令就会提示让你换一个命令来下载全部视频。如要下载下图的视频时:
下载这个链接的时候,结果会如下图所示:
虽然没有报错停止。但却会出现提示,这个提示信息的意思是:不止一个视频,若要下载全部视频用--playlist命令。
不止一个视频的时候,要下载全部视频就要用--playlist命令。其实很简单,只要在原来的命令中加上这个--playlist就行。代码如下:
import os
os.system('you-get --playlist -o 下载路径 视频链接)
再运行时,就不会出现这个提示了:
这样就能下载一个链接下的所有视频了。
批量下载
难道到这里就要停了么。众所周知程序猿都是很懒得,就算俺是一名菜鸡程序员,也不能这样就完事了。比如万一以后想要下载多个链接,难道要挨个复制好链接然后一遍遍启动么?当然不,这是多么蛋疼的操作!于是,稍加改进一下嘛。把想要下载的视频或者啥的链接写进记事本中,让程序自动去挨个读取,然后逐个下载。 还是比较简单的,直接上代码啦:
import os
f = open('note.txt', 'r', encoding='utf-8')
text = f.readlines()
for i in text:
if i != "\n":
print(i)
os.system('you-get --playlist -o E:\\下载路径 '+i)
f.close()
说明一下,note.txt文件就是存放链接的文件,要把这个文件和py文件放在同一个目录下才可以,且一行只放一个链接 如果不是在同一目录下,就要写上相对路径或者绝对路径,并且单斜杠要写成双斜杠。对路径这个名词不清楚的小伙伴就直接放在一个目录下然后单引号下直接写文件名即可,比如note.txt。且切记 E:\下载路径 后面一定要加一个空格,要不然命令会无效的!这样就可以把链接放在文件里,进行批量下载啦!
完结撒花,希望能帮助到大家,另外,本文也会同步到俺个人的微信公众号上,大家也可以去微信公众号上找俺玩。
微信公众号搜索 妖刀Coder 哦~