Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

forkcodeaiyc/bilibili_comment_scraper_webui

Repository files navigation

Bilibili 评论爬取工具

这是一个基于 FastAPI 和 Playwright 的 Web 可视化B站评论抓取应用。用户可以通过简单的网页操作,实现自动登录获取Cookie、指定视频BV号、实时查看爬取日志,并最终下载包含所有评论(可选含楼中楼)的CSV文件。 Python 3.11 截图预览

✨ 功能特性

  • Web 可视化界面: 无需编写任何代码,在浏览器中即可完成所有操作。
  • 一键自动获取Cookie: 利用 Playwright 自动打开浏览器,用户只需扫码登录B站,程序即可自动捕获必要的Cookie,极大降低了使用门槛。
  • 指定BV号爬取: 支持输入任意B站视频的BV号作为爬取目标。
  • 支持爬取楼中楼: 可自由选择是否需要深入爬取每条主评论下的二级评论(楼中楼回复)。
  • 实时日志反馈: 采用 Server-Sent Events (SSE) 技术,在网页上实时显示爬取过程中的每一步状态、进度和可能出现的错误。
  • CSV文件导出: 爬取完成后,自动生成CSV格式的评论数据文件,并提供直接下载链接。
  • 异步非阻塞: 后端采用 FastAPI 和 asyncio,保证了高并发和流畅的用户体验。

⚙️ 智能防风控与上限突破策略

为了应对B站严格的请求限制并尽可能获取最全面的数据,本项目内置了双重保障策略:

  • 突破API分页上限: 我们发现B站的API对单种排序方式的评论存在约5000条的翻页上限(会返回 max offset exceeded 错误)。为了突破这一限制,本工具会自动执行一个双重排序爬取策略:

    1. 首先按 【时间】 排序爬取,直到获取全部或达到5000条上限。
    2. 然后自动切换到按 【热度】 排序再次爬取,同样直到获取全部或达到上限。
    3. 最后,程序会将两份结果在本地合并并自动去重。 通过这种方法,对于评论数极多的视频,最终可以获取到远超5000条、接近1万条理论上限(若含楼中楼则1w+)的独特评论集合。示例:爬取自BV1BK411L7DJ
  • 模拟真人防风控: 在上述爬取过程中,集成了模拟真人行为的防风控机制:

    • 分块请求与长时暂停: 程序会自动将请求划分为随机大小的"块"(例如,每8-15页)。每完成一个块,会进行一次长达15-30秒的随机暂停,以模拟用户阅读评论的停顿行为,打破持续请求的机器人特征。
    • 随机化延时: 无论是块内的分页请求,还是楼中楼的并发请求,所有的等待延时都经过了随机化处理,避免了固定的请求间隔。
    • 并发数量控制: 在爬取楼中楼评论时,通过 asyncio.Semaphore 严格限制并发任务的数量(默认为5),防止因流量突增而触发服务器风控。

策略效果与性能说明

  • 成功率: 经过多次测试,当前策略在爬取大量评论(3w+)的视频(例如 BV1BK411L7DJ)时,能够稳定完成任务,有效规避风控和API上限问题。
  • 性能: 由于采用了保守的延时和双重爬取模式,爬取时间会显著变长(大约每20分钟处理5000条评论)。如果您的目标视频评论数较少(如少于3000条)且希望加快速度,可以自行在 app/scraper.py 文件中适当缩短 asyncio.sleep 的延时时间或调整分块大小。

📁 项目结构

.
├── app # 主应用目录
│ ├── main.py # FastAPI 核心逻辑:路由、WebSocket、SSE等
│ ├── scraper.py # 爬虫核心模块,调用 bilibili-api
│ ├── static # 静态文件
│ │ ├── css/style.css
│ │ └── js/main.js
│ └── templates # Jinja2 前端模板
│ └── index.html
├── requirements.txt # Python 依赖列表
└── run.py # 项目启动文件

🚀 快速开始

为了确保环境纯净且与项目兼容,强烈建议使用 Conda 来管理 Python 环境

步骤 1: 环境准备

  1. 克隆项目

    git clone https://github.com/ManiaAmaeOvo/bilibili_comment_scraper_webui
    cd bilibili_comment_scraper_webui
  2. 创建并激活 Conda 环境 (推荐使用 Python 3.11)

    # 创建一个名为 biliscraper 的新环境,并指定 python 版本为 3.11
    conda create -n biliscraper python=3.11 -y
    # 激活该环境
    conda activate biliscraper

步骤 2: 安装依赖

  1. 安装 Python 库 项目的所有 Python 依赖都记录在 requirements.txt 文件中。

    pip install -r requirements.txt
  2. 安装 Playwright 浏览器驱动 (非常重要!) Playwright 需要一个真实的浏览器内核来执行自动化操作。pip 只安装了 Python 的库,我们还需要下载浏览器驱动。

    # 此命令会自动下载并安装 Chromium, Firefox, WebKit 等浏览器的驱动文件
    playwright install

    如果网络不佳或只想安装 Chrome 驱动,可以使用 playwright install chrome

步骤 3: 启动项目

所有依赖安装完成后,在项目根目录下运行 run.py

python run.py

启动成功后,您会看到类似以下的输出:

INFO: Started server process [xxxxx]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on [http://127.0.0.1:8000](http://127.0.0.1:8000) (Press CTRL+C to quit)

📝 使用指南

  1. 访问应用: 打开您的浏览器 (推荐使用 Chrome),访问 http://127.0.0.1:8000

  2. 自动获取Cookie:

    • 点击 "自动获取Cookie" 按钮。
    • 程序会自动打开一个新的浏览器窗口并导航到B站登录页。
    • 在网页的实时日志区域,您会看到提示。请按照提示,在新弹出的浏览器窗口中使用B站手机App扫描二维码完成登录。
    • 登录成功后,程序会自动跳转页面并捕获Cookie,然后将其填充到文本框中。此过程完成后,浏览器窗口会自动关闭。
  3. 输入视频BV号: 在 "第二步" 的输入框中,填入您想要爬取评论的视频BV号(例如:BV1TAnozgEpe)。

  4. 选择是否爬取楼中楼: 根据您的需求,勾选或取消勾选 "爬取楼中楼 (二级评论)" 复选框。

  5. 开始爬取: 点击 "开始爬取" 按钮。下方的实时日志区会开始滚动显示爬取进度。

  6. 下载文件: 当日志显示 "文件保存成功!" 时,下方会出现一个可点击的下载链接。点击该链接即可下载包含所有评论数据的 .csv 文件。

🛠️ 技术栈

  • 后端:
    • 框架: FastAPI
    • Web服务器: Uvicorn
    • B站API库: bilibili-api
    • 浏览器自动化: Playwright
  • 前端:
    • 模板: Jinja2
    • 样式与脚本: 原生 HTML, CSS, JavaScript
  • 实时通信:
    • Cookie获取: WebSocket
    • 日志推送: Server-Sent Events (SSE)

🙏 致谢

  • 本项目的核心爬取功能依赖于强大的 bilibili-api 库,它极大地简化了与B站API的交互。感谢其作者的无私奉献。官方文档:https://nemo2011.github.io/bilibili-api/
  • 感谢 Google Gemini 在代码编写、前端设计和文档撰写过程中提供的巨大帮助。

📄 许可证 (License)

This project is licensed under the MIT License - see the LICENSE file for details.

About

这是一个基于 FastAPI 和 Playwright 的 Web 可视化B站评论抓取应用。用户可以通过简单的网页操作,实现自动登录获取Cookie、指定视频BV号、实时查看爬取日志,并最终下载包含所有评论(可选含楼中楼)的CSV文件。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

  • Python 49.8%
  • CSS 23.4%
  • JavaScript 18.5%
  • HTML 8.3%

AltStyle によって変換されたページ (->オリジナル) /