Skip to content

Repository files navigation

Bilibili 音视频爬虫 (Bilibili Crawler)

一个用于批量下载指定 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/                  # 测试文件目录

🚀 快速开始

1. 环境要求

  • Python 3.7+
  • Windows / macOS / Linux

2. 安装依赖

使用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)

3. 配置 UP 主链接

编辑 config/settings.py 文件,修改 URL 为目标 UP 主的投稿页面:

URL = "https://space.bilibili.com/UP主ID"

例如(以我自己为例):

URL = "https://space.bilibili.com/326289623"

如何获取 UP 主投稿页链接:

  1. 打开 B 站并访问目标 UP 主的主页
  2. 点击"投稿"或"视频"标签
  3. 复制浏览器地址栏中的完整 URL

4. 运行程序

python Crawl_main.py

首次运行流程:

  1. 程序会生成二维码图片(bilibili_qr_code.png
  2. 使用 B 站 APP 扫描二维码并确认登录
  3. 登录成功后 Cookie 会自动保存到 cookies/bilibili_cookies.json
  4. 程序自动开始爬取视频列表并下载音频

后续运行:

  • 程序会自动读取已保存的 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        # 重试延迟(秒)

⚠️ 注意事项

  1. 遵守规则:请遵守 B 站的使用条款和机器人协议,合理使用本工具
  2. 个人使用:本工具仅供学习和个人使用,请勿用于商业用途
  3. 请求频率:程序已内置随机延迟,请勿修改为过高的请求频率
  4. Cookie 安全:Cookie 文件包含登录信息,请妥善保管,不要泄露
  5. 网络稳定:建议在网络稳定的环境下运行,避免下载中断
  6. 存储空间:确保有足够的磁盘空间存储下载的音频文件

🛠️ 依赖说明

  • crawl4ai:爬虫框架(如项目中使用)
  • playwright:无头浏览器自动化工具,用于模拟真实浏览器行为
  • requests:HTTP 请求库,用于下载文件
  • json:处理 Cookie 和数据解析
  • re:正则表达式,用于提取视频信息

🐛 常见问题

1. 二维码扫描后没有反应

  • 确保在 120 秒内完成扫描和确认
  • 检查网络连接是否正常
  • 尝试删除 cookies/ 目录下的文件后重新运行

2. 下载失败或频繁报错

  • 检查网络连接
  • Cookie 可能已过期,删除 bilibili_cookies.json 后重新登录
  • 检查 UP 主 URL 是否正确

3. Playwright 安装失败

# Windows PowerShell 可能需要管理员权限
playwright install chromium

# 或者使用国内镜像
$env:PLAYWRIGHT_DOWNLOAD_HOST="https://npmmirror.com/mirrors/playwright/"
playwright install chromium

4. 找不到音频文件

  • 确保 audios/ 目录已创建(程序会自动创建)
  • 检查程序是否有写入权限
  • 查看控制台输出的错误信息

📄 许可证

本项目仅供学习交流使用。使用本项目产生的一切后果由使用者自行承担。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📧 联系方式

如有问题或建议,欢迎提交 Issue。


免责声明:本工具仅用于技术学习和研究,请勿用于任何违反 B 站服务条款的行为。下载的内容版权归原作者所有,请尊重创作者的劳动成果。

About

No description, website, or topics provided.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages