EDG夺冠,粉丝炸锅了!
北京时间11月6日,在英雄联盟S11总决赛中,中国LPL赛区战队EDG电子竞技俱乐部以3∶2战胜韩国LCK赛区战队DK,获得2021年英雄联盟全球总决赛冠军。
这个比赛也是备受全网瞩目:
- 微博热搜第一名,显示有8194万观看;
- bilibili平台,吸引3.5亿人气,满屏弹幕;
- 腾讯视频600万人看过;
- 斗鱼和虎牙平台的热度也是居高不下;
- 比赛结束后,央视新闻也发微博祝贺EDG战队夺冠;

既然比赛热度这么高,那大家都说了点啥?
我们用Python分析了31000条弹幕数据,满屏都是粉丝的祝福与感受。

我们不仅可以通过直播和新闻来感受比赛的整个过程,也可以通过Python来分析热点来感受粉丝的热情。
手把手教你获取弹幕数据
1. 简单说明
没看过直播的朋友不要紧,有回放呀!整个视频已经为大家整理好了,从开幕式,到五场比赛,再到夺冠时刻,一共7个视频。

每个视频中,都有粉丝发布的弹幕。今天要做的,就是获取每个视频里面的弹幕数据,看看粉丝在躁动的心情下,说了点啥?
不得不说,B站网页的变化速度真快,我记得去年还是很容易找到的。但是今天却一直没有找到。
但是没有关系,我们直接将以前的弹幕数据网址接口拿过来使用就行。
API: https://api.bilibili.com/x/v1/dm/list.so?oid=XXX
这个oid其实就是一串数字,每个视频都有一个独特的oid。
2. oid数据找寻
本小节就带着大家一步步找寻这个oid。要找到oid,首先要找到一个叫做cid的东西。
点击F12,先打开开发者工具,按照图中提示,完成1-5处的操作。

- 第3处:这个页面有很多个请求,但是你需要找到这个以pagelist开头的请求。
*第4处:观察对应的Header下方,有一个Request URL,我们要的cid就在这个网址中。 - 第5处:观察对应的Preview下方,就是请求Request URL,响应给我们的结果,图中圈起来的就是我们要的cid数据。
2. cid数据获取
上述我们已经找到了Request URL,下面我们只需要发起请求,获取里面的cid数据即可。
import requests
import json
url = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1EP4y1j7kV&jsonp=jsonp'
res = requests.get(url).text
json_dict = json.loads(res)
for i in json_dict["data"]:
oid = i["cid"]
print(oid)
1234567891011
结果如下:

其实,这里cid对应的数字串,就是oid后面的数字串。
3. 拼接url
我们不仅有了弹幕api接口,也有了cid数据,接下来将它们进行拼接,就可以得到最终的url。
url = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1EP4y1j7kV&jsonp=jsonp'
res = requests.get(url).text
json_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
结果如下:

一共有7个网址,分别对应7个视频里面的弹幕数据。
随便点开一个查看:

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.text
pattern = 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
结果如下:

这只是其中一页的数据,共有7200条数据。
完整代码
上述我已经分步为大家讲解了每一步过程,这里我直接将代码封装成函数。
import os
import requests
import json
import re
import chardet
def 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_list
def concat_url(cid):
api = "https://api.bilibili.com/x/v1/dm/list.so?oid="
url = api + str(cid)
return url
def 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 data
def 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
结果如下:

确实很棒,一共3.1w数据!
保姆级词云图制作教程
对于获取到了 数据,我们 利用EDG背景图,制作一个好看的词云图。
import pandas as pd
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from imageio import imread
import warnings
warnings.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 = [" "] + stop
s_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
结果如下:

关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

本文分享了EDG在英雄联盟S11总决赛夺冠的消息及粉丝反应,详细介绍了如何使用Python抓取弹幕数据并进行分析,最终制作出词云图。
7358

被折叠的 条评论
为什么被折叠?



