Python 采集电视剧《开端》弹幕并生成词云图
引言
网络视频平台的弹幕功能为用户提供了实时互动的体验,其中蕴含了大量用户的情感倾向和观点。通过爬虫技术采集弹幕数据,并进行文本挖掘与可视化分析,可以帮助我们了解观众对剧集的关注点、情感分布以及剧情讨论的热度。本文将以国产剧《开端》为例,演示如何使用 Python 采集其弹幕数据,经过清洗处理后,利用词云图进行可视化展示。
本文详细讲解了如何使用 Python 采集电视剧《开端》的弹幕数据并进行词云可视化分析。内容包括环境搭建、网络接口分析、Requests 爬虫代码实现、Pandas 数据清洗、Jieba 中文分词以及 Pyecharts 词云图绘制。文章提供了完整的代码示例,涵盖了从数据获取到最终可视化的全流程,并对反爬策略、数据编码及停用词处理进行了说明,帮助读者掌握弹幕数据挖掘的基本方法。

网络视频平台的弹幕功能为用户提供了实时互动的体验,其中蕴含了大量用户的情感倾向和观点。通过爬虫技术采集弹幕数据,并进行文本挖掘与可视化分析,可以帮助我们了解观众对剧集的关注点、情感分布以及剧情讨论的热度。本文将以国产剧《开端》为例,演示如何使用 Python 采集其弹幕数据,经过清洗处理后,利用词云图进行可视化展示。
在开始之前,请确保您的开发环境已安装以下工具和库:
requests:用于发送 HTTP 请求。pandas:用于数据处理和分析。jieba:用于中文分词(需自行安装)。pyecharts:用于生成交互式词云图。安装命令如下:
pip install requests pandas jieba pyecharts
打开目标视频网站的网页版,播放《开端》剧集,观察屏幕上的弹幕。使用浏览器开发者工具(F12),切换到 Network(网络)面板,选择 XHR 或 Fetch 过滤器。
在页面上搜索特定的弹幕内容(例如输入'那么多座位你俩非要挤一起吗'),可以在请求列表中找到对应的 JSON 数据包。该数据包通常包含一个 comments 字段,里面存储了具体的弹幕信息。
通过分析请求 URL,可以发现弹幕接口的结构通常由以下部分组成:
https://mfm.video.qq.com/danmuotype=json,指定返回格式为 JSON。target_id,对应视频的特定标识。timestamp,用于获取不同时间段的弹幕,通常每隔 30 秒更新一次。vid, session_key 等,根据具体网站而定。URL 示例:
https://mfm.video.qq.com/danmu?otype=json&target_id=7626117232&vid=n0041aa087e&session_key=0,0,0×tamp={page}&_=1641804763748
注意:实际项目中需要动态构造这些参数,特别是 timestamp 需要根据循环逻辑递增,以获取全集的弹幕数据。
我们需要遍历每一集的时间段,发送请求并解析 JSON 数据。以下是完整的采集代码示例:
import requests
import pandas as pd
import time
# 构建一个列表存储数据
data_set = []
# 模拟遍历时间戳,每 30 秒为一个批次
# 实际使用时请根据剧集总时长调整 range 范围
for page in range(15, 600, 30):
try:
# 1. 构建请求 URL
url = f'https://mfm.video.qq.com/danmu?otype=json&target_id=7626117232&vid=n0041aa087e&session_key=0,0,0×tamp={page}&_=1641804763748'
# 2. 设置请求头,模拟浏览器访问,防止被反爬
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
response.encoding = 'utf-8'
# 3. 获取数据
json_data = response.json()
# 4. 解析数据
comments = json_data.get('comments', [])
for comment in comments:
data_dict = {}
data_dict['commentid'] = comment.get('commentid')
data_dict['content'] = comment.get('content')
data_dict['opername'] = comment.get('opername')
data_dict['time'] = comment.get('time')
print(data_dict)
data_set.append(data_dict)
# 增加延时,避免请求过快被封禁
time.sleep(1)
except Exception as e:
print(f"发生错误:{e}")
pass
# 5. 保存数据到 CSV 文件
df = pd.DataFrame(data_set)
df.to_csv('danmu_data.csv', index=False, encoding='utf-8-sig')
print("数据采集完成,已保存至 danmu_data.csv")
utf-8-sig 编码,防止 Excel 打开时出现乱码。采集到的弹幕数据包含大量噪声,如表情符号、特殊字符、无意义词汇等。为了生成准确的词云,需要进行文本清洗。
使用 pandas 读取 CSV 文件,并利用 jieba 库进行中文分词。
import jieba
from collections import Counter
# 读取数据
df = pd.read_csv('danmu_data.csv')
# 获取所有评论内容并合并成一个字符串
all_text = ' '.join(df['content'].dropna().astype(str))
# 使用 jieba 进行精确模式分词
cut_words = jieba.lcut(all_text)
# 过滤停用词和单字(可选)
stopwords = set(['的', '了', '是', '在', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这'])
filtered_words = [w for w in cut_words if len(w.strip()) > 1 and w not in stopwords]
# 统计词频
word_counts = Counter(filtered_words)
# 转换为 DataFrame 格式以便后续处理
df_word = pd.DataFrame(word_counts.most_common(100), columns=['word', 'count'])
建议维护一份自定义停用词表,去除常见的无意义词汇,提高词云的准确性。可以将停用词保存在 stopwords.txt 文件中并在代码中加载。
使用 pyecharts 库绘制交互式词云图,支持鼠标悬停显示词频详情。
from pyecharts.charts import WordCloud
from pyecharts import options as opts
# 准备数据
word_list = df_word['word'].tolist()
count_list = df_word['count'].tolist()
data_pair = list(zip(word_list, count_list))
# 创建词云对象
c = (
WordCloud()
.add(series_name="弹幕热词", data_pair=data_pair, word_size_range=[10, 50], shape='circle')
.set_global_opts(
title_opts=opts.TitleOpts(title="《开端》弹幕热词分析"),
tooltip_opts=opts.TooltipOpts(trigger="item")
)
)
# 渲染输出
c.render_notebook() # 若在 Jupyter 中使用
# c.render("wordcloud.html") # 若保存为 HTML 文件
生成的词云图中,字体大小代表弹幕出现的频率。颜色可以根据词频自动分配,也可以自定义配色方案。通过旋转角度、形状等参数,可以调整视觉效果,使其更符合审美需求。

本文详细介绍了使用 Python 采集视频弹幕数据的全过程,包括接口分析、数据抓取、文本清洗及词云可视化。通过这一流程,我们可以快速提取出观众关注的核心话题。
在实际应用中,还可以进一步结合情感分析算法(如 SnowNLP)对弹幕进行正负面评价分类,从而获得更深层的用户洞察。希望本文能为相关数据分析项目提供参考。
注:本文仅供学习交流使用,请勿用于非法用途。采集数据时请遵守相关法律法规及网站服务条款。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online