一、前言

在日常观看B站视频时,我们经常会看到视频下方的弹幕。弹幕不仅仅是观众的互动,它还蕴含着大量的信息,通过分析弹幕内容,我们可以挖掘出视频的情感趋势、用户的情感态度等有价值的数据。今天,我们将带着大家一起爬取B站的视频弹幕,并对弹幕进行情感分析和关键词提取。

二、环境准备

在开始之前,我们需要安装一些基础的 Python 库:

pip install requests
pip install snownlp
pip install jieba
pip install gensim
pip install pyecharts

三、爬取B站弹幕

B站的弹幕数据是通过API接口返回的,我们只需要向指定的API发送请求,获取到视频ID对应的弹幕数据即可。

import requests

# B站弹幕API链接(通过视频ID获取弹幕)
oid = '25750933691'  # 视频ID(可以从视频链接中获取)
url = f'https://api.bilibili.com/x/v1/dm/list.so?oid={oid}'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
    'Cookie': 'your_cookie_here'  # 这里填写你的Cookie信息
}

# 获取弹幕数据
response = requests.get(url, headers=headers)
if response.status_code == 200:
    with open('danmu.xml', 'wb') as f:
        f.write(response.content)
    print("弹幕保存成功!")
else:
    print("获取弹幕失败")

解释

  • oid:视频的ID,通常可以从B站视频链接中获取。
  • url:弹幕API的链接。
  • headers:请求头部信息,需包括 Cookie,你可以通过浏览器开发者工具获得。
  • danmu.xml:保存获取到的弹幕数据,格式是 XML。

四、弹幕情感分析

爬取到弹幕后,我们可以通过 SnowNLP 库进行情感分析。SnowNLP 是一个中文情感分析工具,它能够将文本分为积极、消极两类。

from snownlp import SnowNLP

# 读取爬取到的弹幕文件
with open('danmu.txt', 'r', encoding='utf-8') as file:
    data = file.readlines()

# 情感分析
sentiments = []
for line in data:
    s = SnowNLP(line)
    sentiments.append(s.sentiments)  # 获取情感得分

# 打印情感得分
for sentiment in sentiments:
    print(f"情感得分: {sentiment}")

解释

  • SnowNLP 提供了一个 .sentiments 属性,它返回一个 0 到 1 的情感得分,越接近 1 代表情感越积极。

五、关键词提取和词向量训练

使用 jieba 分词和 Word2Vec 进行关键词提取和词向量训练。

import jieba
from gensim.models import Word2Vec

# 分词处理
corpus = []
for line in data:
    words = jieba.lcut(line)  # 使用结巴分词
    corpus.append(words)

# 使用 Word2Vec 训练词向量模型
model = Word2Vec(sentences=corpus, vector_size=100, window=5, min_count=1, workers=4)
model.save("word2vec.model")
print("Word2Vec模型训练完毕!")

解释

  • jieba.lcut:分词工具。
  • Word2Vec:训练词向量模型,通过弹幕内容来训练,提取出高频词汇。

六、数据可视化:情感分析与关键词

使用 ECharts 生成可视化图表,展示情感分析的结果和关键词的词云图。

from pyecharts import options as opts
from pyecharts.charts import Bar, WordCloud

# 情感分析可视化(柱状图)
bar = (
    Bar()
    .add_xaxis([f"弹幕 {i+1}" for i in range(len(sentiments))])
    .add_yaxis("情感得分", sentiments, itemstyle_opts=opts.ItemStyleOpts(color="blue"))
    .set_global_opts(title_opts=opts.TitleOpts(title="弹幕情感得分趋势"))
)
bar.render("sentiment_analysis.html")

# 关键词词云图
word_freq = {}
for words in corpus:
    for word in words:
        word_freq[word] = word_freq.get(word, 0) + 1

wordcloud = (
    WordCloud()
    .add("关键词", [(word, freq) for word, freq in word_freq.items()], word_size_range=[10, 100])
    .set_global_opts(title_opts=opts.TitleOpts(title="弹幕关键词词云"))
)
wordcloud.render("wordcloud.html")

解释

  • 情感得分柱状图:展示每个弹幕的情感得分,得分越高,情感越积极。
  • 关键词词云图:展示弹幕中的高频关键词,通过大小来表现词频。

七、总结

通过爬取 B 站的视频弹幕,并结合情感分析与关键词提取,我们能够获取到有价值的观众情绪数据,并进行更深入的分析。在此基础上,您可以探索更多的应用场景,比如实时监控视频情感变化,分析特定时段的情感趋势等。

八、参考资料

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐