想知道怎么用脚本自动下载B站视频合集吗?

wen 实用脚本 52

想知道怎么用脚本自动下载B站视频合集吗?——从零到一的全流程实战指南

目录导读


为什么你需要自动下载B站视频合集?

很多小伙伴在B站追番、学课程、看纪录片时,都会遇到一个痛点:手动一个个点开视频再点击下载,不仅慢,还容易漏掉某些集数。 尤其当合集包含50集甚至100集以上时,手动操作几乎不可能完成。

想知道怎么用脚本自动下载B站视频合集吗?

自动下载脚本能帮你实现:

  • 一键抓取整个合集的所有视频链接。
  • 批量下载,无需值守。
  • 自动选择画质(4K/1080P/720P等)。
  • 按合集顺序命名文件夹,方便后续整理。

典型场景:程序员想离线学习某个技术栈的全套教程;学生党想保存老师的网课回放合集;二次元爱好者想把整个番剧合集存到本地反复观看。


核心工具与原理:脚本怎么“看”懂B站

要实现自动下载,我们需要一套“组合工具”,目前最主流、社区最活跃的方案是:Python + yt-dlp(或 you-get)配合 B站API

工作原理其实很简单

  1. 脚本模拟浏览器请求,获取合集页面的源代码或JSON数据。
  2. 从数据中解析出每个视频的 bv号(或 av号)以及顺序。
  3. 调用 yt-dlp 工具,它支持B站特殊的API接口,能直接解析出视频和音频的下载链接。
  4. 脚本循环遍历所有视频,逐一下载并保存。

为什么不用浏览器插件?
虽然某些插件也能做到,但它们受限于浏览器环境,无法后台运行,而且容易被B站的反爬机制拦截,Python脚本更灵活,可以配置代理、用户代理、Cookie等参数,稳定性和速度都更好。


实战步骤一:环境搭建与脚本获取

安装Python环境

  • 访问 python.org 下载最新版(建议3.9以上)。
  • 安装时勾选“Add Python to PATH”。
  • 打开终端(CMD或PowerShell),输入 python --version 确认安装成功。

安装核心工具

打开终端,分别执行:

pip install yt-dlp
pip install requests

yt-dlp 是下载引擎,requests 用来请求B站页面数据。

准备脚本本体

推荐使用 GitHub 上的开源项目 bili-dlbilibili-API-collect,这里我提供一个精简后可直接运行的伪原创脚本思路(你也可以自己搜索“bilibili合集下载脚本 最新”):

脚本核心逻辑如下(伪代码,不要直接复制):

import re, requests, subprocess, os
def get_bv_list(collection_url):
    # 1. 从URL中提取合集ID
    cid = re.search(r'series/(\d+)', collection_url).group(1)
    # 2. 请求B站API获取合集内所有视频的bv号
    api = f"https://api.bilibili.com/x/series/archives?series_id={cid}&ps=100&pn=1"
    headers = {"User-Agent": "Mozilla/5.0"}
    resp = requests.get(api, headers=headers)
    data = resp.json()
    # 3. 提取bv号列表
    bv_list = [item['bvid'] for item in data['data']['archives']]
    return bv_list
def download_bv(bv):
    cmd = f'yt-dlp -o "downloads/%(title)s.%(ext)s" "https://www.bilibili.com/video/{bv}"'
    subprocess.run(cmd, shell=True)
# 主程序
if __name__ == "__main__":
    url = input("请输入合集URL: ")
    bvs = get_bv_list(url)
    for bv in bvs:
        download_bv(bv)
        print(f"完成: {bv}")

注意:上述代码只是一个逻辑展示,实际使用时需要处理分页、Cookie认证(下载高清视频需要登录)、错误重试等细节。


实战步骤二:解析合集链接与参数配置

怎样找到正确的合集URL?

一个标准的B站合集链接格式通常是:
https://www.bilibili.com/cheese/play/ep{数字}(付费课程合集)

https://space.bilibili.com/{uid}/channel/seriesdetail?sid={合集ID}(UP主自建合集)

重点:不要复制单个视频的URL,要复制合集页面的URL。

  • 正确的:https://www.bilibili.com/cheese/play/ep777777
  • 错误的:https://www.bilibili.com/video/BV1GJ411x7R

配置下载参数(画质、路径等)

在yt-dlp命令中追加参数:

  • -f 137+140:下载视频(137代表1080P)和音频(140)再合并。
  • --cookies-from-browser chrome:读取浏览器Cookie,用于下载高清视频(4K需要登录)。
  • -o "D:/合集/%(playlist_title)s/%(chapter_number)s %(title)s.%(ext)s":自定义保存路径和命名规则。

实战步骤三:多线程下载与格式选择

为什么要用多线程?

B站对单IP的请求速度有限制,直接用单线程下载几十个视频会非常慢,多线程能同时下载3-5个视频,把总时间缩短数倍。

实现方法:在脚本中使用Python的 concurrent.futures 模块,

from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=5) as executor:
    executor.map(download_bv, bv_list)

格式选择建议

  • 收藏级画质:选 4K:-f 136+140(需要登录且有4K权限)。
  • 普通保存:选 1080P:-f 137+140
  • 仅音频:选 140(AAC格式)或 128(高中音质)。
  • 弹幕+字幕:yt-dlp也支持导出XML弹幕和CC字幕,用参数 --write-sub --write-auto-sub

常见问题与排雷手册

提示“403 Forbidden”怎么办?

这是因为B站对请求做了防盗链,解决方案:

  • 在请求头加上 Referer: https://www.bilibili.com
  • 对于下载命令,加 --add-header "Referer:https://www.bilibili.com"

只能下载240P怎么办?

B站的部分视频(尤其是番剧)需要Cookie验证会员权限,在yt-dlp命令后加 --cookies-from-browser chrome,让它从你的浏览器读取已登录的Cookie。

合集只有前20集被识别?

B站API默认每页返回30条,如果合集超过30集需要循环翻页,脚本需要处理 pn 参数循环请求,直到 has_more 为False。

下载速度慢得像蜗牛?

  • 检查网络限制,尝试用 --throttled-rate 100M 解除限速。
  • 更换国内DNS或使用代理。
  • 如果目标链接是付费课程,可能被设定了防刷机制。

问答环节:你关心的脚本下载问题

Q1:这样做会被B站封号吗?
A1:正常个人使用且频率不高的情况下,风险极低。 脚本只是模拟浏览器请求,只要你不是每秒下载几十个视频,一般不会被封,建议设置每次下载间隔2-3秒,虽然慢但更安全。

Q2:付费课程合集能下载吗?
A2:理论上可以,但需要你有对应的会员权限。 脚本读取Cookie后,可以下载你已购买/已开通会员的视频,但未经授权分享付费资源是违规的,请仅用于自己离线学习。

Q3:MAC或Linux系统能用吗?
A3:完全兼容。 yt-dlp支持Windows/Mac/Linux,Python脚本也是跨平台的,唯一区别是路径写法,把 downloads/ 改成 downloads\\ 即可。

Q4:下载的视频没有字幕怎么办?
A4:B站的字幕分两种:AI生成的字幕和UP主上传的CC字幕,在yt-dlp命令后加 --write-subs--write-auto-subs,即可自动获取,如果有弹幕需求,可以配合 bili2text 工具转换。

Q5:脚本需要更新吗?
A5:需要,因为B站的API和反爬策略会变。 建议每2-3个月检查你说的那个的GitHub项目是否有更新,或者关注社区的相关动态,也可以自己抓包分析最新的接口变化。


结尾提示:自动下载脚本是一个开源社区不断迭代的工具,如果你在配置过程中遇到新版变化,请参考最新的社区文档,本文基于2023-2024年主流方案编写,核心思路和参数已为你梳理完毕,现在就动手试试吧!如果你有更好的方法,欢迎留言交流。

抱歉,评论功能暂时关闭!