EDG夺冠,我用Python分析一波:粉丝都炸锅了

347 篇文章 12 订阅
257 篇文章 16 订阅

EDG夺冠,粉丝炸锅了!

北京时间11月6日,在英雄联盟S11总决赛中,中国LPL赛区战队EDG电子竞技俱乐部以3∶2战胜韩国LCK赛区战队DK,获得2021年英雄联盟全球总决赛冠军。

这个比赛也是备受全网瞩目:

  • 微博热搜第一名,显示有8194万观看;
  • bilibili平台,吸引3.5亿人气,满屏弹幕;
  • 腾讯视频600万人看过;
  • 斗鱼和虎牙平台的热度也是居高不下;
  • 比赛结束后,央视新闻也发微博祝贺EDG战队夺冠;

EDG夺冠,我用Python分析一波:粉丝都炸锅了

既然比赛热度这么高,那大家都说了点啥?

我们用Python分析了31000条弹幕数据,满屏都是粉丝的祝福与感受。

EDG夺冠,我用Python分析一波:粉丝都炸锅了

我们不仅可以通过直播和新闻来感受比赛的整个过程,也可以通过Python来分析热点来感受粉丝的热情。

文中用到的源代码、字体文件、停用词文件、背景图,均可添加好友领取!

手把手教你获取弹幕数据

1. 简单说明

没看过直播的朋友不要紧,有回放呀!整个视频已经为大家整理好了,从开幕式,到五场比赛,再到夺冠时刻,一共7个视频。

EDG夺冠,我用Python分析一波:粉丝都炸锅了

每个视频中,都有粉丝发布的弹幕。今天要做的,就是获取每个视频里面的弹幕数据,看看粉丝在躁动的心情下,说了点啥?

不得不说,B站网页的变化速度真快,我记得去年还是很容易找到的。但是今天却一直没有找到。

但是没有关系,我们直接将以前的弹幕数据网址接口拿过来使用就行。

API: https://api.bilibili.com/x/v1/dm/list.so?oid=XXX

这个oid其实就是一串数字,每个视频都有一个独特的oid。

2. oid数据找寻

本小节就带着大家一步步找寻这个oid。要找到oid,首先要找到一个叫做cid的东西。

点击F12,先打开开发者工具,按照图中提示,完成1-5处的操作。

EDG夺冠,我用Python分析一波:粉丝都炸锅了

  • 第3处:这个页面有很多个请求,但是你需要找到这个以pagelist开头的请求。
  • 第4处:观察对应的Header下方,有一个Request URL,我们要的cid就在这个网址中。
  • 第5处:观察对应的Preview下方,就是请求Request URL,响应给我们的结果,图中圈起来的就是我们要的cid数据。

2. cid数据获取

上述我们已经找到了Request URL,下面我们只需要发起请求,获取里面的cid数据即可。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以价位(同音):762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

import requestsimport jsonurl = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1EP4y1j7kV&jsonp=jsonp'res = requests.get(url).textjson_dict = json.loads(res)for i in json_dict["data"]:    oid = i["cid"]    print(oid)1234567891011

结果如下:

image.png

其实,这里cid对应的数字串,就是oid后面的数字串。

3. 拼接url

我们不仅有了弹幕api接口,也有了cid数据,接下来将它们进行拼接,就可以得到最终的url。

url = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1EP4y1j7kV&jsonp=jsonp'res = requests.get(url).textjson_dict = json.loads(res)
for i in json_dict["data"]:    
oid = i["cid"]    
api = "https://api.bilibili.com/x/v1/dm/list.so?oid="    
url = api + str(oid)    
print(url)12345678910

结果如下:

EDG夺冠,我用Python分析一波:粉丝都炸锅了

一共有7个网址,分别对应7个视频里面的弹幕数据。

随便点开一个查看:

image.png

4. 正则提取弹幕数据并保存

有了完整的url后,我们要做的就是提取里面的数据,这里还是直接采用正则表达式。我们以其中一个视频为例,为大家讲解。

final_url = "https://api.bilibili.com/x/v1/dm/list.so?oid=437729555"final_res = requests.get(final_url)
final_res.encoding = chardet.detect(final_res.content)['encoding']
final_res = final_res.textpattern = re.compile('<d.*?>(.*?)</d>')
data = pattern.findall(final_res)
with open("弹幕.txt", mode="w", encoding="utf-8") as f:    
for i in data:        
f.write(i)        
f.write("\n")1234567891011

结果如下:

image.png

这只是其中一页的数据,共有7200条数据。

完整代码

上述我已经分步为大家讲解了每一步过程,这里我直接将代码封装成函数。

import osimport requestsimport jsonimport reimport chardetdef get_cid():    
url = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1EP4y1j7kV&jsonp=jsonp'    
res = requests.get(url).text    
json_dict = json.loads(res)    
cid_list = []    
for i in json_dict["data"]:        
cid_list.append(i["cid"])    
return cid_listdef concat_url(cid):    
api = "https://api.bilibili.com/x/v1/dm/list.so?oid="    
url = api + str(cid)    
return urldef get_data(url):    
final_res = requests.get(url)    
final_res.encoding = chardet.detect(final_res.content)['encoding']    
final_res = final_res.text    
pattern = re.compile('<d.*?>(.*?)</d>')    
data = pattern.findall(final_res)    
return datadef save_to_file(data):    
with open("弹幕数据.txt", mode="a", encoding="utf-8") as f:        
for i in data:            
f.write(i)            
f.write("\n")            
cid_list = get_cid()for cid in cid_list:    
url = concat_url(cid)    
data = get_data(url)    
save_to_file(data)12345678910111213141516171819202122232425262728293031323334353637383940414243

结果如下:

EDG夺冠,我用Python分析一波:粉丝都炸锅了

确实很棒,一共3.1w数据!

保姆级词云图制作教程

对于获取到了 数据,我们 利用EDG背景图,制作一个好看的词云图。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以价位(同音):762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

import pandas as pdimport jiebafrom wordcloud import WordCloudimport matplotlib.pyplot as pltfrom imageio import imreadimport warningswarnings.filterwarnings("ignore")
for i in ["EDG","永远的神","yyds","牛逼","发来贺电"]   
 jieba.add_word(i)with open("弹幕数据.txt",encoding="utf-8") as f:   
 txt = f.read()txt = txt.split()txt = [i.upper() for i in txt]data_cut = [jieba.lcut(x) for x in txt]with open("stoplist.txt",encoding="utf-8") as f:    
stop = f.read()stop = stop.split()stop = [" "] + stops_data_cut = pd.Series(data_cut)all_words_after = s_data_cut.apply(lambda x:[i for i in x if i not in stop])all_words = []for i in all_words_after:    all_words.extend(i)word_count = pd.Series(all_words).value_counts()
back_picture = imread("EDG.jpg")
wc = WordCloud(font_path="simhei.ttf",               
background_color="white",              
 max_words=1000,               
mask=back_picture,               
max_font_size=200,               
random_state=42              )
wc2 = wc.fit_words(word_count)plt.figure(figsize=(16,8))plt.imshow(wc2)plt.axis("off")plt.show()wc.to_file("ciyun.png")123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657

结果如下:

EDG夺冠,我用Python分析一波:粉丝都炸锅了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值