手把手教你实现『B站直播』弹幕实时分析

简介: 大家好,我是阿辰,今天来教大家如何实现『B站直播』弹幕实时分析思路:采集直播弹幕,然后通过情感分析,不同时间点的评论数,高频词统计

大家好,我是阿辰,今天来教大家如何实现『B站直播』弹幕实时分析

思路:采集直播弹幕,然后通过情感分析,不同时间点的评论数,高频词统计

一、采集直播弹幕
首先在B站随意打开一个直播房间

https://live.bilibili.com/22080761?hotRank=0&session_id=acbf4a0396f4c22_E68865D5-1DD6-4677-859D-4A81FC5B86C6&visit_id=64j0r30ef8c0
房间号:22080761

1.查找弹幕链接
通过F12查看network,找到下面这个链接

https://api.live.bilibili.com/xlive/web-room/v1/index/roomEntryAction

可以看到是post请求,经过验证只需要房间号就可以获取弹幕!

2.构造post请求
roomid = "22080761"
url = 'https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory'
headers = {

'Host': 'api.live.bilibili.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',

}
data = {

'roomid': roomid,

}
html = requests.post(url=url, headers=headers, data=data).json()
直接返回json数据

二、实时采集
为了达到实时采集的目的,需要将采集弹幕的代码封装成函数,然后每个几秒调用一次这个函数(比如这里定为5秒)

1.定时代码
def sleeptime(hour, min, sec):

return hour * 3600 + min * 60 + sec

second = sleeptime(0, 0, 5)
while 1 == 1:

time.sleep(second)
print('do action')
###5秒采集一次
get_msg()

这里的get_msg是采集弹幕函数

2.写入TxT

with open(filename,"a+", encoding='gb18030') as f:
    for content in html['data']['room']:
        # 获取昵称
        nickname = content['nickname']
        # 获取发言
        text = content['text']
        # 获取发言时间
        timeline = content['timeline']
        # 记录发言
        msg = timeline + '*' + nickname + '*' + text
        ###不存在则添加
        if msg not in msg_data:
            f.write(str(msg)+"\n")

文本以房间号命名

三、情感分析
情绪判断,返回值为正面情绪的概率,越接近1表示正面情绪,越接近0表示负面情绪
先简单来看一个例子

text1 = '这部电影真心棒,全程无尿点'
s1 = SnowNLP(text1)
print(text1, s1.sentiments) # 这部电影真心棒,全程无尿点 0.9842572323704297
通过SnowNLP库实现文本的情感分析

roomid = "22080761"
filename = roomid + ".txt"

读取当前txt

with open(filename, "r", encoding='gb18030') as f:

msg_data = f.readlines()

Sentiment_list = []

正面

count1 = 0

负面

count2 = 0
for i in msg_data:

    text = i.split("*")[2]
    t = SnowNLP(text)
    if t.sentiments > 0.5:
        count1 = count1 +1
    else:
        count2 = count2 + 1

Sentiment_list.append(count1)
Sentiment_list.append(count2)
print(Sentiment_list)
从弹幕文本文件中读取出每一条弹幕,然后进行情感分析,最后统计正面评论数和负面评论数

正面弹幕13条、负面弹幕10条。

四、不同时间点评论数分析
同样还是读取弹幕文本文件,之后就以分钟为间隔进行统计

获取当前小时

h = time.strftime("%Y-%m-%d %H", time.localtime())
开始统计

for i in msg_data:

    time_list.append(i.split("*")[0].split(":")[1])

data_time = list(set(time_list))
data_time.sort()

只取三个

if len(data_time)>7:

data_time = data_time[-7:]

name = [h+":"+i for i in data_time]
value =[time_list.count(i) for i in data_time]
print(name)
print(value)

五、高频词统计
思路:通过SnowNLP库对文本(弹幕)进行分词然后会分好的词进行统计排序

先将弹幕合并成文本

for i in msg_data:

#if ymdhm in i:
    text_list.append(i.split("*")[2])

需要操作的句子

text = "".join(text_list)
text = text.replace("\n","")
print(text)
s = SnowNLP(text)
开始进行统计,然后取出前5

list_all = s.words
dict_x = {}
for item in list_all:

dict_x[item] = list_all.count(item)

sorted_x = sorted(dict_x.items(), key=operator.itemgetter(1), reverse=True)
re_word_list = []
re_word_list_name = []
re_word_list_data = []
count = 0
for k, v in sorted_x:

if count==5:
    break
if len(k)>1:
    re_word_list_name.append(k)
    re_word_list_data.append(v)
    count = count+1

re_word_list.append(re_word_list_name)
re_word_list.append(re_word_list_data)
print(re_word_list)

六、总结
本文主要是讲解了任何实时采集直播弹幕,然后通过SnowNLP库等对弹幕数据进行统计。

如果大家对本文代码源码感兴趣,扫码关注『Python爬虫数据分析挖掘』后台回复:直播弹幕 ,获取完整代码!

最后说一声:原创不易,求给个赞、在看、评论

------------- 推荐阅读 -------------

高质量推荐

可视化分析中国500强排行榜数据

.实战讲解四种不同爬虫解析数据方法,必须掌握!

一键查询明星个人信息,并以知识图谱可视化展示

爬取展示『王者荣耀』2020年-2021年2月收入流水线

‍‍‍‍

专注:python、爬虫、数据分享、数据可视化

相关文章
搭建一个简单的直播网站
我是一个比较爱看直播的人,经常空闲的时候会看一看LOL、吃鸡的直播。正好最近在研究阿里云的视频直播服务,突发奇想,自己来搭建一个简单的直播平台!主要会用到的东西有:视频直播、ECS、OBS、阿里播放器。
9205 1
|
10月前
|
编解码 JSON 数据格式
实现在线直播源码高质量直播体验重要功能
在线直播源码平台中会出现各种各样问题,而应对这些问题,在线直播源码平台又开发出不同的功能,云端混流转码就是其中重要功能之一,它为平台带来了很大的优势。
|
10月前
|
数据采集 IDE Linux
B站这个超火的视频,弹幕都在说啥?
B站这个超火的视频,弹幕都在说啥?
|
11月前
|
存储 缓存 监控
直播系统聊天技术(九):千万级实时直播弹幕的技术实践
疫情期间,线上演唱会是一种很常见的直播娱乐形式,由于线下社交距离的限制,线上形式演唱会比以往更火爆,而对技术的要求也更高。 本文基于网易云信针对TFBOYS某场线上演唱会的技术支持,为你分享千万级在线用户量的直播系统中实时弹幕功能的技术实践,希望能带给你启发。
246 0
直播源码搭建技术弹幕消息功能的实现
今天我要分享的这个直播源码技术功能也是大家非常常见的,这个功能不仅仅应用在直播源码平台中,在各大影视app中也一直被应用,那这个功能是什么那?
直播源码搭建技术弹幕消息功能的实现
|
运维 Cloud Native 容器
【直播】直播预告 | 云原生游戏第4讲:游戏服的网络接入和状态管理【直播已生成回放】
2022 年 11 月 29 日(周二)阿里云容器服务高级工程师 & 云原生游戏负责人,刘秋阳将会为大家详细介绍 OKG 的网络插件功能,一键式部署游戏服南北向网络,OKG 的自定义服务质量功能,以及自动化地感知并管理游戏服状态。
【直播】直播预告 | 云原生游戏第4讲:游戏服的网络接入和状态管理【直播已生成回放】
|
数据采集 Python
Python爬虫系列13-采集快手短视频官网数据
读书不是唯一出路,但学习一定是。 有些人忙碌的活着,有些人努力的拼搏,有些人随意挥霍青春,人生百态,各有不同。
Python爬虫系列13-采集快手短视频官网数据
|
存储 API 开发工具
根据斗鱼开发者文档获取斗鱼弹幕
根据斗鱼开发者文档开发相关弹幕抓取。
387 0
|
编解码 算法 开发工具
直播泛在化的今天, 如何快速搭建不同场景的直播系统
目前,不同的直播业务场景的直播需求越来越多,不同的直播需求对应着不同的技术侧重点。本篇演讲将通过介绍阿里云的直播技术架构,从客户的角度讲解如何集成阿里云的直播产品,描绘在阿里云视频云直播系统内进行快速的场景搭建效果,展示其直播系统的技术特点。
直播泛在化的今天, 如何快速搭建不同场景的直播系统
|
视频直播
直播系统的顶梁柱:视频直播源码中的礼物功能
我们了解的直播系统功能是十分的实用且丰富的,一般来说,视频直播源码自带的功能有:直播功能、私信功能、邀请奖励、财务管理功能、短视频功能、直播PK功能、多种礼物功能、分享功能、拉黑功能、带货商城功能、家族功能、标签功能、评论功能等等实质性的功能,今天就针对礼物功能来做一下详细的介绍。
直播系统的顶梁柱:视频直播源码中的礼物功能