大家好~我是恰恰,好久不见啦~Python的乐趣就在于在互联网时代,能实现很多人工做不到的事~    虽然我不是经常玩游戏,但是我这该死的爱国情怀,在EDG夺冠的时候,我也是十分激动的!

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

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

微博热搜第一名,显示有8194万观看;

bilibili平台,吸引3.5亿人气,满屏弹幕;

腾讯视频600万人看过;

斗鱼和虎牙平台的热度也是居高不下;

比赛结束后,央视新闻也发微博祝贺EDG战队夺冠;

我们不仅可以通过直播和新闻来感受比赛的整个过程,也可以通过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 requestsimport jsonurl = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1EP4y1j7kV&jsonp=jsonp'res = requests.get(url).textjson_dict = json.loads(res)#pprint(json_dict)for i in json_dict["data"]:    oid = i["cid"]    print(oid)

其实,这里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)#pprint(json_dict)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)

一共有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.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")

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

完整提取弹幕程序代码,提取后弹幕存在“弹幕.txt”中。

import osimport requestsimport jsonimport reimport chardet# 获取ciddef 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# 拼接urldef 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)

将提取到的弹幕数据转为词云图完整代码

# 1 导入相关库import pandas as pdimport jiebafrom wordcloud import WordCloudimport matplotlib.pyplot as pltfrom imageio import imread
import warningswarnings.filterwarnings("ignore")
# 注意:动态添加词语集for i in ["EDG","永远的神","yyds","牛逼","发来贺电"]:    jieba.add_word(i)
# 2 读取文本文件,并使用lcut()方法进行分词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]
# 3 读取停用词with open("stoplist.txt",encoding="utf-8") as f:    stop = f.read()stop = stop.split()stop = [" "] + stop
# 4 去掉停用词之后的最终词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])
# 5 词频统计all_words = []for i in all_words_after:    all_words.extend(i)word_count = pd.Series(all_words).value_counts()
# 6 词云图的绘制# 1)读取背景图片back_picture = imread("EDG.jpg")
# 2)设置词云参数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)
# 3)绘制词云图plt.figure(figsize=(16,8))plt.imshow(wc2)plt.axis("off")plt.show()wc.to_file("ciyun.png")

以前很多人都会说,游戏不是好东西,玩物丧志之类的,但是EDG、IG他们都在用事实证明,不管我们在做着什么,我们都会有好的作用,就像学习Python一样,可能有人觉得不就是一个编程语言吗?有什么了不起,但是在人工智能越来越发达的情况下,Python起着重要的作用,所以同学们,对任何事都不要低估他,努力去学习就好啦!

不破不立~EDG夺冠,用Python分析词云图展示粉丝弹幕数据,来感受粉丝的热情吧相关推荐

  1. 微博评论爬虫 | 情感分析 | 词云图展示

    目录 1. 数据获取部分 实验环境 数据获取目标 抓包 PC端和移动端分析 抓取到的目标链接 分析评论信息存储位置 爬虫结果 2. 情感分析部分 数据准备 主要代码 效果 3. 词云图部分 主要代码 ...

  2. python绘制词云图转换图_(数据科学学习手札71)利用Python绘制词云图

    1 简介 词云图是文本挖掘中用来表征词频的数据可视化图像,通过它可以很直观地展现文本数据中地高频词: 图1 词云图示例 在Python中有很多可视化框架可以用来制作词云图,如pyecharts,但这些 ...

  3. EDG夺冠,Python分析一波B站评论,总结:EDG,nb

    前言 2012,一个卡牌,一个雷恩加尔,一群红衣少年的欢声笑语. 2013,一个杰斯,一个扎克,一场支离破碎的梦境. 2014,一个螳螂,一个兰博,一座摇摇欲坠的基地. 2015,一个寡妇,一个妖姬, ...

  4. EDG夺冠,用Python分析一波,词云图展示粉丝弹幕数据

    北京时间11月6日,在英雄联盟S11总决赛中,中国LPL赛区战队EDG电子竞技俱乐部以3∶2战胜韩国LCK赛区战队DK,获得2021年英雄联盟全球总决赛冠军. 这个比赛也是备受全网瞩目: 微博热搜第一 ...

  5. Python基于WordCloud词云图的数据可视化分析 词云图的基本使用 政府工作报告分析

    Python基于WordCloud词云图的数据可视化分析 词云图的基本使用 政府工作报告分析 文章目录 1.词云图简介 2.wordcloud库的安装 3.WordCloud的主要参数说明 4.绘制词 ...

  6. 运用java爬虫和python做词云图

    前言: 最近有点时间,就写个东西玩玩,就是分析电影评论做成词云图.这次没有采用python去爬取电影评论,而是采用了java中的多线程和线程池去爬取电影评论,但是用评论做词云图使用python写的.如 ...

  7. python中文词云图代码_python词云图与中文分词

    2019-12-12中文文本分词和词云图具体功能介绍与学习代码: import jieba a="由于中文文本的单词不是通过空格或者标点符号来进行分割" #jieba.lcut() ...

  8. python实现词云图

    python实现词云图 import matplotlib.pyplot as plt import jieba from wordcloud import WordCloud,ImageColorG ...

  9. python生成词云图_用python生成词云图教程

    闲话不多说,直接上干货! STEP1 安装jieba包 点击桌面菜单栏的开始按钮,输入cmd回车,进入命令窗口. 在命令行输入 pip install jieba回车,安装jieba包. 安装word ...

最新文章

  1. centos7网卡编辑_CentOS7修改网卡为eth0
  2. Arctext.js - 基于 CSS3 jQuery 的文本弯曲效果
  3. 【转】关于Azure存储账户
  4. mysql_数据备份和迁移(Windows)
  5. jquery操作下拉框(select)的一些说明
  6. Red Hat Enterprise Linux 7 启动过程
  7. C语言深度解剖读书笔记(6.函数的核心)
  8. 玉龙雪山还会存在多久
  9. 什么工作经常出差_职场妈妈困扰: 经常出差, 工作孩子该怎么选择?
  10. 机房运维服务器,机房服务器维护指导
  11. 图像的三种分形维数的计算方法
  12. 伽罗华有限域_信息论与编码:有限域
  13. UTF-8的编码规则
  14. 欺骗的艺术----(9)
  15. 【阅读器】caj格式及其转换为PDF格式
  16. bugku ctf 细心的大象 wirteup
  17. Other | PPTV电视安装第三方应用教程
  18. 解决:AttributeError: can't set attribute
  19. 输入PM2.5的值,判断空气质量
  20. 入门qt一定要买qt圣经

热门文章

  1. Python趴网站图片demo
  2. 3dMax使用Vray渲染器制作光效教程
  3. 获得屏幕分辨率的宽和高
  4. html怎么设置随鼠标移动,CSS_css实现随鼠标移动div渐变色效果,HTML 复制代码代码如下:div - phpStudy...
  5. 深度学习——全连接层(Fully connected dence layers)原理解析
  6. 【IoT】 产品设计之结构设计:PMMA(亚克力)板、PC耐力板、PS有机板与MS板区别
  7. IDEA 多服务项目结构:Commit Changes 不显示变动文件
  8. i7-10750H性能怎么样?相当于台式机什么水平?
  9. jsp html 页面DOCTYPE
  10. open**N获取用户登录登出信息