如何批量下载b站收藏夹内的视频
最近有位朋友找我帮忙,要求是这样的:
下载他的b站收藏夹中的所有视频,并转换为音频
为什么会变成这样?主要是考虑到QQ音乐,网易云之类的平台下载的音乐大部分需要VIP,相比之下,b站一些up主上传到音乐MV就更加亲民一些。主要是这种要求我还是第一次见(貌似很冷门的样子),网上并没有检索到现成的方法,于是我总结了一下自己用到的一些方法。
思路:
1. 获取所有视频的链接
2. 写python脚本进行批量下载
首先放一下他的收藏夹:帕多露
进入收藏夹第一页,Edge浏览器中按 Ctrl+Shift+i
打开开发人员工具
然后按 Ctrl+Shift+c
,选择收藏夹中第一个视频,结构树将展开到以下位置
1 | <div data-v-9fdc3374="" class="items"> |
向上寻找,找到类似 <div data-v-9fdc3374="" class="items"> 的标签,右键选择 Edit as HTML 编辑为HTML,将里面的内容全部复制
1 | 内容太多就不展示了 |
然后使用正则表达式匹配其中的视频链接
正则表达式在线测试
1 | https://www.bilibili.com/video/BV[A-Za-z0-9_]+\?spm_id_from=[0-9]+.[0-9]+.favlist.content.click |
匹配结果如下 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16https://www.bilibili.com/video/BV1Bh4y1m7mz?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV1Bh4y1m7mz?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV11i421r752?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV11i421r752?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV1uK4y127K2?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV1uK4y127K2?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV1me411n7eu?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV1me411n7eu?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV1PT421X7EZ?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV1PT421X7EZ?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV15u411H7kP?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV15u411H7kP?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV1JK4y1u7KH?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV1JK4y1u7KH?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV14h4y1J7kw?spm_id_from=333.1387.favlist.content.click
https://www.bilibili.com/video/BV14h4y1J7kw?spm_id_from=333.1387.favlist.content.click
此时不难注意到每条链接被重复匹配了两次,这个一会在python代码中处理
刚才的操作只是获取了收藏夹第一页的视频链接,使用相同的方法获取对其余页进行处理
将提取好的链接保存在文本文档中,接下来编写程序实现批量下载
程序中使用了 you-get 下载器,执行以下命令安装
1
pip install you-get
然后使用以下python程序 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# downloader.py
import os
import sys
args = sys.argv
file = args[1]
savedir = args[2]
with open(file) as f:
links = f.read().split("\n")
for i in range(int(len(links)/2)):
del links[i]
for i in links:
os.system("you-get %s -o %s"%(i,savedir))
os.system("pause")
运行程序,参数如下
其中 file为保存了视频链接的文本文档的路径,savedir为视频保存路径
这里演示从 FBY.txt 中读取链接,并将视频保存在 D:\download 1
python downloader.py [file] [savedir]
1
python downloader.py "FBY.txt" "D:\download"
部分输出: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15you-get: You will need login cookies for 720p formats or above. (use --cookies to load cookies.txt.)
site: Bilibili
title: 【4K超高清】千本桜原版MV feat 初音ミク
stream:
- format: dash-flv480-AVC
container: mp4
quality: 清晰 480P avc1.64001F
size: 26.0 MiB (27215369 bytes)
# download-with: you-get --format=dash-flv480-AVC [URL]
Downloading 【4K超高清】千本桜原版MV feat 初音ミク.mp4 ...
100% ( 26.0/ 26.0MB) ├████████████████████████████████████████┤[2/2] 7 MB/s
Merging video parts... Merged into 【4K超高清】千本桜原版MV feat 初音ミク.mp4
Downloading 【4K超高清】千本桜原版MV feat 初音ミク.cmt.xml ...
保存路径中的.xml文件为视频对应的弹幕文件,可以将其删除,其余的.mp4为视频文件,根据需求使用格式工厂之类的软件进行转码。