bilibili-danmaku-sentiment-analysis
# B站弹幕舆情分析 Skill
专注于**弹幕舆情与节奏分析**的智能工具,输入B站视频链接,自动提取弹幕数据并生成专业的分析提示词,供大模型深度解读舆情走向、情感演变和互动节奏。
## 核心功能
- ✅ **弹幕提取** - 提取视频所有弹幕(滚动、底端、顶端等全部类型)
- ✅ **时间分段分析** - 将弹幕按视频时间轴分10段,便于分析节奏变化
- ✅ **情感统计概览** - 统计正面/负面/疑问关键词占比
- ✅ **弹幕采样整理** - 每段精选代表性弹幕,生成结构化分析数据
- ✅ **Markdown分析报告** - 自动生成完整的Markdown格式舆情分析报告
- ✅ **专业分析提示词** - 生成可直接使用的大模型分析提示词
- ✅ **无需登录** - 使用B站公开API,完全免费
## 前置条件
### 1. 环境要求
- Python 3.8+
- 网络可访问 B站 API
- 大模型对话能力(用于生成分析结果)
### 2. 依赖安装
```bash
pip install requests
```
## 使用方式
### 对话中使用
```
@skill://B站弹幕舆情分析 请分析这个视频的弹幕舆情:https://www.bilibili.com/video/BV1xx97xx9xx
```
### 命令行使用
```bash
# 提取弹幕并生成分析数据
python main.py "https://www.bilibili.com/video/BV1xx97xx9xx"
# 指定输出目录
python main.py "https://www.bilibili.com/video/BV1xx97xx9xx" -o /path/to/output
# 使用BV号
python main.py "BV1xx97xx9xx"
```
## 工作流程
```
输入B站视频链接
│
▼
1. 提取BV号 (正则匹配)
│
▼
2. 获取视频信息 (标题、UP主、时长、CID等)
│
▼
3. 获取弹幕数据 (XML/压缩格式)
│
▼
4. 数据整理与分析
├── 按时间分段(10段)
├── 统计弹幕类型分布
├── 情感关键词统计(正面/负面/疑问)
└── 每段采样代表性弹幕
│
▼
5. 生成分析提示词
└── 输出结构化提示词供大模型分析
```
## 输出内容
### 1. 视频信息
- 标题、BV号、UP主、时长、弹幕总数
### 2. 弹幕统计概览
- 弹幕类型分布(滚动/底端/顶端等)
- 正面关键词占比
- 负面关键词占比
- 疑问句占比
### 3. 时间分段弹幕(10段)
每段包含:
- 时间范围
- 弹幕数量
- 精选弹幕样本(每段最多10条)
### 4. 大模型分析提示词
生成结构化的分析提示词,包含以下维度:
#### 舆情分析
- 整体情感倾向
- 情感演变轨迹
- 情感峰值时段
#### 节奏分析
- 高能预警点
- 讨论热度分布
- 弹幕密度变化
#### 内容特征
- 主要话题
- 梗与玩梗
- 用户互动类型
#### 舆情风险点
- 潜在负面点
- 风险预警
## 技术实现
### 核心API接口
| 数据 | 接口URL | 参数 |
|------|---------|------|
| 视频信息 | `https://api.bilibili.com/x/web-interface/view?bvid={bvid}` | bvid |
| 弹幕数据 | `https://api.bilibili.com/x/v1/dm/list.so?oid={cid}` | oid(视频cid) |
### 请求头设置
```python
DEFAULT_HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...',
'Referer': 'https://www.bilibili.com/',
'Origin': 'https://www.bilibili.com'
}
```
### 情感关键词
**正面关键词**: 牛、强、棒、好、赞、顶、泪目、感动、喜欢、爱、甜、炸、绝、完美、厉害、超
**负面关键词**: 烂、差、垃圾、废物、蠢、尴尬、难、崩、无语、失望、难看、无聊、扯、假
**疑问关键词**: ?、?、怎么、为什么、什么、如何、是不是、能不能
## 输出文件
### JSON格式 (`xxx_弹幕分析数据.json`)
```json
{
"video": {
"bvid": "BV1xx97xx9xx",
"title": "视频标题",
"owner": "UP主名称",
"duration": 600,
"duration_str": "10:00"
},
"statistics": {
"total_count": 1234,
"type_distribution": {"滚动": 1000, "底端": 200, "顶端": 34},
"positive_keyword_count": 150,
"negative_keyword_count": 50,
"question_keyword_count": 80,
"positive_rate": 12.15,
"negative_rate": 4.05,
"question_rate": 6.48
},
"time_segments": [...],
"sampled_danmakus": [...]
}
```
### 分析提示词文件 (`xxx_分析提示词.txt`)
可直接复制给大模型的完整分析提示词,包含:
- 视频信息
- 弹幕统计
- 分段弹幕内容
- 分析要求(舆情、节奏、内容特征、风险点)
### Markdown分析报告 (`xxx_弹幕舆情分析报告.md`)
自动生成的完整Markdown格式分析报告,包含:
#### 报告结构
- **视频信息**: 标题、BV号、UP主、时长、弹幕总数
- **弹幕统计概览**: 类型分布、正面/负面/疑问关键词占比
- **弹幕时间分布**: 密度分布图、高密度时段TOP3
- **分时段弹幕详情**: 每段代表性弹幕样本
- **舆情分析**: 整体情感倾向、情感峰值时段、高能预警点
- **节奏分析**: 弹幕密度变化特征
- **主要发现**: 弹幕内容特征总结
- **风险提示**: 舆情风险预警
- **总结**: 核心发现总结
#### 报告示例
```markdown
# B站视频弹幕舆情与节奏分析报告
## 视频信息
| 项目 | 内容 |
|------|------|
| 标题 | xxx |
| BV号 | BV1xx |
| 弹幕总数 | 1234 条 |
## 弹幕统计概览
| 指标 | 数值 |
|------|------|
| 正面关键词占比 | 10.39% |
| 负面关键词占比 | 3.78% |
## 弹幕时间分布
| 时段 | 弹幕数 | 密度 |
|00:00-01:13 | 201 | ######---- |
|01:13-02:27 | 165 | #####----- |
## 舆情分析
**整体情感倾向**: 正面
**结论**: 观众对该视频的整体情感倾向为正面...
```
## 脚本参数
| 参数 | 说明 | 示例 |
|------|------|------|
| `url` | B站视频链接或BV号 | `BV1ky97B9Efn` |
| `-o, --output` | 输出目录 | `-o ./output` |
## 注意事项
1. **无需登录**: 脚本使用B站公开API,无需登录即可提取弹幕
2. **弹幕采样**: 为控制数据量,每段时间弹幕最多采样20条
3. **频率限制**: 建议控制请求频率,避免触发风控
4. **大模型分析**: 脚本仅生成分析提示词,实际分析需大模型完成
## 故障排除
| 问题 | 原因 | 解决 |
|------|------|------|
| 获取弹幕为0 | CID获取失败或视频无弹幕 | 检查网络或视频有效性 |
| 412/403错误 | 风控拦截 | 添加延时或稍后重试 |
| 视频信息获取失败 | BV号无效 | 检查链接格式是否正确 |
## 文件结构
```
B站弹幕舆情分析/
├── SKILL.md # 本说明文件
├── _skillhub_meta.json # Skill元数据
├── main.py # 核心脚本
└── requirements.txt # Python依赖
```
---
## 实际案例
### 案例:三十五年的《宇宙级安全声明》弹幕舆情分析
**用户输入**:
```
@skill://B站弹幕舆情分析 请分析这个视频的弹幕舆情:https://www.bilibili.com/video/BV1csDuBREjo
```
**执行过程**:
1. **提取BV号**:`BV1csDuBREjo`
2. **获取视频信息**:
- 标题:三十五年的《宇宙级安全声明》,东大,开始撤回!
- UP主:老王聊天
- 时长:12:17
3. **获取弹幕**:通过CID调用弹幕接口,获取到 **1800 条**弹幕
4. **数据整理**:
- 按时间分10段
- 统计情感关键词:正面187次,负面68次,疑问182次
- 每段采样代表性弹幕
5. **生成输出文件**:
- JSON数据文件
- 分析提示词文件
- **Markdown分析报告** ← 核心新增功能
**分析结果**:
| 指标 | 数值 |
|------|------|
| 弹幕总数 | 1800 条 |
| 正面关键词占比 | 10.39% |
| 负面关键词占比 | 3.78% |
| 正面/负面比 | 2.75 倍 |
| 整体情感倾向 | 正面 |
| 最高密度时段 | 11:03-12:17 (290条) |
**弹幕密度分布**:
```
| 时段 | 弹幕数 | 密度 |
|00:00-01:13 | 201 | ######---- |
|01:13-02:27 | 165 | #####----- |
|02:27-03:41 | 146 | #####----- |
|03:41-04:54 | 216 | #######--- |
|04:54-06:08 | 99 | ###------- |
|06:08-07:22 | 136 | ####------ |
|07:22-08:35 | 216 | #######--- |
|08:35-09:49 | 201 | ######---- |
|09:49-11:03 | 130 | ####------ |
|11:03-12:17 | 290 | ########## | ← 高潮阶段
```
**输出成果**:
- ✅ 成功提取 1800 条弹幕
- ✅ 自动生成 Markdown 分析报告
- ✅ 报告包含完整舆情分析(视频信息、统计概览、时间分布、舆情分析、节奏分析、风险提示、总结)
**报告预览**(部分):
```markdown
# B站视频弹幕舆情与节奏分析报告
## 视频信息
| 项目 | 内容 |
|------|------|
| 标题 | 三十五年的《宇宙级安全声明》,东大,开始撤回! |
| BV号 | `BV1csDuBREjo` |
| 弹幕总数 | **1800 条** |
## 弹幕统计概览
| 指标 | 数值 |
|------|------|
| 正面关键词占比 | 10.39% |
| 负面关键词占比 | 3.78% |
**整体情感倾向**: 正面
## 舆情分析
**结论**: 观众对该视频的整体情感倾向为正面,正面评价占比10.39%,负面评价占比3.78%,正面是负面的2.75倍。
## 风险提示
**整体舆情**: 弹幕内容积极正面,未发现明显舆情风险点。
```
标签
skill
ai