一个用于批量下载指定 B 站 UP 主所有视频音频的 Python 爬虫工具。
本项目可以自动爬取指定 B 站 UP 主投稿页面的所有视频,并批量下载视频的音频文件。支持自动登录、Cookie 管理、多页视频列表抓取等功能。
- 🔐 二维码登录:首次使用时通过扫描二维码登录 B 站账号
- 💾 Cookie 持久化:自动保存登录状态,下次使用无需重复登录
- 📋 批量获取视频列表:自动获取 UP 主所有投稿视频的链接
- 🎵 音频下载:批量下载视频的音频文件(MP3 格式)
- 🔄 失败重试机制:下载失败时自动重试(最多 3 次)
- ⏱️ 智能延迟:随机延迟避免触发反爬机制
- 🎭 无头浏览器:使用 Playwright 模拟真实浏览器行为
bilibili_voice_crawl/
├── Crawl_main.py # 主程序入口
├── README.MD # 项目说明文档
├── requirements.txt # 依赖包列表
├── config/ # 配置模块
│ ├── __init__.py
│ └── settings.py # 配置文件(URL、路径等)
├── cookies/ # Cookie 存储目录
│ └── bilibili_cookies.json
├── crawler/ # 爬虫模块
│ ├── __init__.py
│ └── crawler.py # 爬虫核心逻辑
├── interact/ # 交互模块
│ ├── __init__.py
│ └── interact.py # 登录交互逻辑
├── audios/ # 音频文件存储目录
├── videos/ # 视频文件存储目录(可选)
└── test/ # 测试文件目录
- Python 3.7+
- Windows / macOS / Linux
使用conda环境(可选)
conda create -n bilibili_crawl python=3.12 -y
conda activate bilibili_crawl安装依赖
pip install uv
uv pip install -r requirements.txt安装完成后,还需要安装 Playwright 浏览器驱动:
playwright install或者只安装 Chromium:
playwright install chromium另外还需要安装 ffmpeg 来处理音视频合并:
sudo apt install ffmpeg # Linux(Ubuntu)编辑 config/settings.py 文件,修改 URL 为目标 UP 主的投稿页面:
URL = "https://space.bilibili.com/UP主ID"例如(以我自己为例):
URL = "https://space.bilibili.com/326289623"如何获取 UP 主投稿页链接:
- 打开 B 站并访问目标 UP 主的主页
- 点击"投稿"或"视频"标签
- 复制浏览器地址栏中的完整 URL
python Crawl_main.py首次运行流程:
- 程序会生成二维码图片(
bilibili_qr_code.png) - 使用 B 站 APP 扫描二维码并确认登录
- 登录成功后 Cookie 会自动保存到
cookies/bilibili_cookies.json - 程序自动开始爬取视频列表并下载音频
后续运行:
- 程序会自动读取已保存的 Cookie,无需重复登录
- 如果 Cookie 过期,删除
cookies/bilibili_cookies.json后重新运行程序即可
在 config/settings.py 中可以修改以下配置:
# Cookie 存储路径
COOKIES_PATH = "./cookies/bilibili_cookies.json"
# 视频文件存储路径
VIDEO_PATH = "./videos"
# 音频文件存储路径
AUDIO_PATH = "./audios"
# 合并后的视频存储路径(如需下载完整视频)
MERGED_PATH = "./merged"
# 目标 UP 主的投稿页 URL
URL = "https://space.bilibili.com/UP主ID/video"默认模式下,程序只下载音频文件(MP3 格式)到 audios/ 目录。
如果需要下载完整视频或修改下载逻辑,可以编辑 crawler/crawler.py 中的以下方法:
__download_audio(url)- 仅下载音频__download_video(url)- 仅下载视频__download_all(url)- 下载视频和音频并合并(需要 FFmpeg)
在 download_all_videos() 方法中修改调用的函数即可。
程序内置失败重试机制:
- 最大重试次数:3 次
- 重试间隔:60 秒
- 请求间隔:2.5-4.5 秒随机延迟
可在 crawler/crawler.py 的 __init__ 方法中修改:
self.max_attempts = 3 # 最大重试次数
self.delay = 60 # 重试延迟(秒)- 遵守规则:请遵守 B 站的使用条款和机器人协议,合理使用本工具
- 个人使用:本工具仅供学习和个人使用,请勿用于商业用途
- 请求频率:程序已内置随机延迟,请勿修改为过高的请求频率
- Cookie 安全:Cookie 文件包含登录信息,请妥善保管,不要泄露
- 网络稳定:建议在网络稳定的环境下运行,避免下载中断
- 存储空间:确保有足够的磁盘空间存储下载的音频文件
- crawl4ai:爬虫框架(如项目中使用)
- playwright:无头浏览器自动化工具,用于模拟真实浏览器行为
- requests:HTTP 请求库,用于下载文件
- json:处理 Cookie 和数据解析
- re:正则表达式,用于提取视频信息
- 确保在 120 秒内完成扫描和确认
- 检查网络连接是否正常
- 尝试删除
cookies/目录下的文件后重新运行
- 检查网络连接
- Cookie 可能已过期,删除
bilibili_cookies.json后重新登录 - 检查 UP 主 URL 是否正确
# Windows PowerShell 可能需要管理员权限
playwright install chromium
# 或者使用国内镜像
$env:PLAYWRIGHT_DOWNLOAD_HOST="https://npmmirror.com/mirrors/playwright/"
playwright install chromium- 确保
audios/目录已创建(程序会自动创建) - 检查程序是否有写入权限
- 查看控制台输出的错误信息
本项目仅供学习交流使用。使用本项目产生的一切后果由使用者自行承担。
欢迎提交 Issue 和 Pull Request!
如有问题或建议,欢迎提交 Issue。
免责声明:本工具仅用于技术学习和研究,请勿用于任何违反 B 站服务条款的行为。下载的内容版权归原作者所有,请尊重创作者的劳动成果。