Python 采集《雪中悍刀行》弹幕生成词云实例
前言
随着网络视频平台的普及,弹幕已成为观众表达观点的重要方式。通过分析弹幕内容,可以直观地了解观众对剧集的反馈、情感倾向以及关注焦点。本文以电视剧《雪中悍刀行》为例,演示如何使用 Python 采集其部分视频弹幕数据,经过清洗处理后,利用词云图进行可视化展示,从而分析观众的讨论热点。
知识点介绍
本教程将涉及以下核心技术点:
- requests 模块:用于发送 HTTP 请求,获取视频弹幕接口数据。
- pandas 库:用于数据的存储、处理及表格化保存。
- jieba 分词:中文文本处理的基础库,用于将弹幕文本切分为词语。
- pyecharts:基于 ECharts 的可视化库,用于绘制交互式词云图。
环境准备
确保已安装以下 Python 版本及依赖库:
- Python 3.8+
- PyCharm 或 VS Code 等开发工具
- 依赖包安装命令:
pip install requests pip install pandas pip install pyecharts pip install jieba
代码实现详解
1. 导入必要的模块
首先导入所需的库,包括正则表达式、网络请求、数据处理及可视化相关的模块。
import re
import requests
import pandas as pd
from collections import Counter
import jieba
from pyecharts.charts import WordCloud
from pyecharts import options as opts
2. 构建请求头与发送网络请求
视频弹幕接口通常位于移动端域名下,需要模拟浏览器 User-Agent 以避免被拦截。通过循环分页参数,批量获取弹幕数据。
# 设置请求头,模拟 Chrome 浏览器
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}
# 初始化列表用于储存解析后的数据
data_list = []
# 遍历页码范围,根据实际接口调整
# 注意:实际项目中需确认接口是否支持该参数范围,此处为示例逻辑
for page in range(15, 1500, 30):
# 构造请求 URL,包含目标 ID 和会话密钥
url = f'https://mfm.video.qq.com/danmu?otype=json&target_id=7626435152&vid=p0041oidttf&session_key=0,174,1642248894×tamp={page}'
try:
response = requests.get(url=url, headers=headers, timeout=10)
if response.status_code == 200:
json_data = response.json()
# 简单判断是否有数据返回
if 'comments' in json_data:
comments = json_data['comments']
# 处理每一条评论
for comment in comments:
data_dict = {}
# 提取评论 ID
data_dict['commentid'] = comment.get('commentid', '')
# 提取评论内容
content = comment.get('content', '')
# 清理特殊字符(如控制符)
content = re.sub(r'[\x0e\xa0]', '', content)
data_dict['content'] = content
# 提取用户名
data_dict['opername'] = comment.get('opername', '')
data_list.append(data_dict)
else:
print(f"请求失败,状态码:{response.status_code}")
except Exception as e:
print(f"发生错误:{e}")
3. 数据保存
使用 Pandas 将采集到的字典列表转换为 DataFrame,并保存为 CSV 文件,方便后续查看和分析。指定编码为 utf-8-sig 以防止 Excel 打开时出现乱码。
# 创建 DataFrame
if data_list:
df = pd.DataFrame(data_list)
# 保存数据
df.to_csv('danmu_data.csv', encoding='utf-8-sig', index=False)
print(f"数据已保存,共 {len(df)} 条记录")
else:
print("未采集到有效数据")
4. 词云图可视化
这是核心步骤。读取保存的 CSV 文件,提取内容列,使用 jieba 进行中文分词,统计词频,最后通过 pyecharts 渲染词云。
# 读取数据
df = pd.read_csv('danmu_data.csv')
contents = df['content'].dropna().tolist()
# 合并所有文本并进行分词
all_text = ' '.join(contents)
cut_words = jieba.lcut(all_text)
# 过滤停用词(示例:简单的长度过滤,实际应加载停用词表)
filtered_words = [word for word in cut_words if len(word.strip()) > 1]
# 统计词频
counter = Counter(filtered_words)
# 获取前 N 个高频词
top_words = counter.most_common(100)
# 准备数据格式 [(word, count), ...]
word_count_list = top_words
# 创建词云对象
wc = (
WordCloud()
.add(series_name="弹幕热词", data_pair=word_count_list, word_size_range=[10, 50], shape='circle')
.set_global_opts(
title_opts=opts.TitleOpts(title="《雪中悍刀行》弹幕词云分析"),
tooltip_opts=opts.TooltipOpts(is_show=True)
)
)
# 渲染输出
wc.render_notebook() # 在 Jupyter 中显示
# wc.render("wordcloud.html") # 保存为 HTML 文件
常见问题与优化建议
- 反爬虫机制:如果请求频繁被封禁,建议增加随机延时或使用代理 IP。
- 接口变更:视频平台的弹幕接口经常更新,若代码失效,需重新抓包分析新的 API 结构。
- 分词效果:默认分词可能无法识别剧名中的专有名词(如'徐凤年'),建议自定义词典。
- 性能优化:当数据量较大时,建议使用多线程或异步请求加速采集过程。
总结
通过上述步骤,我们成功实现了从视频平台采集弹幕数据,经过清洗、分词,最终生成了可视化的词云图。这种方法不仅适用于《雪中悍刀行》,也可广泛应用于其他影视作品的舆情分析。掌握这一流程,有助于提升数据分析能力,为内容运营提供数据支持。
在实际应用中,还可以进一步结合情感分析算法,量化观众的正向与负向情绪,从而获得更深入的洞察。

