用Python分析S11决赛EDGvsDK,教你怎么硬核吹EDG

简介: 用Python分析S11决赛EDGvsDK,教你怎么硬核吹EDG

兄弟们,我们是冠军,EDG是S11世界总冠军!

世界上没有无法征服的高峰,只有永不退缩一往无前的骑士!

真的,我赛前的心理预期非常低,我一直想的是EDG能赢一局就好,赢两局血赚,结果一路打到第五局的时候,我心理已经就一个词:冠军。

整个比赛过程深受全网关注:

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

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

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

首先我们打开B站热门排行榜,我们先来分析网页,找到评论数据所在地方。


目标获取

我们此次获取的目标是EDG我们是冠军视频的60000+评论

 

网页分析

首先我们F12找到如下评论数据

观察发现,我们所有的评论信息全在在一个不规则的json文件当中

不规则是因为前面多了一串jQuery的字符串,后面多了一个')'

正中内容才是一个标准的json数据集。

 

发送请求

先来获取单页数据,在此之前我们先要获取浏览器headers信息,防止被网站反爬。

url = f'https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_{1636423610452 + page}&jsonp=jsonp&next={page}&type=1&oid=336587753&mode=3&plat=1&_={time_thick}'
 
        headers = {
            "cookie": "b_ut=-1; i-wanna-go-back=-1; _uuid=19DF1EDB-20B7-FF74-A700-9DF415B2429530977infoc; buvid3=AAD6C6C7-FB31-40E7-92EC-7A6A7ED3920C148814infoc; sid=jzp2723t; fingerprint=2e74a5bc11a3adec2616987dde475370; buvid_fp=AAD6C6C7-FB31-40E7-92EC-7A6A7ED3920C148814infoc; buvid_fp_plain=AAD6C6C7-FB31-40E7-92EC-7A6A7ED3920C148814infoc; DedeUserID=434541726; DedeUserID__ckMd5=448fda6ab5098e5e; SESSDATA=1fe46ad7%2C1651971297%2Ceb583*b1; bili_jct=5bcd45718996ac402a29c7f23110984d; video_page_version=v_new_home_14; blackside_state=1; rpdid=|(u)YJlJmmu|0J'uYJYRummJm; bp_t_offset_434541726=590903773845625600; bp_video_offset_434541726=590903773845625600; bsource=search_baidu; innersign=1; CURRENT_BLACKGAP=0; CURRENT_FNVAL=80",
            'referer': 'https://www.bilibili.com/video/BV12R4y1E7kn?spm_id_from=333.934.0.0',
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.8 Safari/537.36'
        }
 
        resp = requests.get(url, headers=headers)
 
        if resp.status_code == requests.codes.ok:
            # 获取resp响应
            text = resp.text

如我们所想,获取到的数据就是不个不规则的json数据,接下来我们将其转换成标准版的json数据便于我们接下来获取数据

如下我们得到了一个标准的json数据集,接下来就可以获取我们的评论数据了

 # 获取resp响应
text = resp.text[41:-1]
 
# 转换json格式
json_data = json.loads(text)
 
ic(json_data)
 
'''
ic| json_data: {'code': 0,
                'data': {'assist': 0,
                         'blacklist': 0,
                         'callbacks': None,
                         'cm': {},
                         'cm_info': {'ads': None},
                         'config': {'read_only': False,
                                    'show_del_log': True,
                                    'show_up_flag': True,
                                    'showadmin': 1,
                                    'showentry': 1,
                                    'showfloor': 0,
                                    'showtopic': 1},
                         'control': {'answer_guide_android_url': 'https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=6',
                                     'answer_guide_icon_url': 'http://i0.hdslb.com/bfs/emote/96940d16602cacbbac796245b7bb99fa9b5c970c.png',
                                     'answer_guide_ios_url': 'https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=12',
                                     'answer_guide_text': '需要升级成为lv2会员后才可以评论,先去答题转正吧!',
                                     'bg_text': '看看下面~来发评论吧',
                                     'child_input_text': '',
                                     'giveup_input_text': '不发没关系,请继续友善哦~',
                                     'input_disable': False,
                                     'root_input_text': '发一条友善的评论',
                                     'show_text': '',
                                     'show_type': 1,
                                     'web_selection': False},
'''

我们此次要获取的数据有如下五个,评论作者、性别、时间、评论点赞人数和评论内容

 # 获取所有评论
datas = json_data['data']['replies']
 
for item in datas:
    # 评论者
    name = item['member']['uname']
 
    # 性别
    sex = item['member']['sex']
 
    # 评论时间
    ctime = item.get('ctime')
    content_time = time.strftime('%Y-%m-%d %H:%M', time.localtime(ctime))
 
    # 点赞人数
    star = item['like']
 
    # 评论内容
    cmts = item['content']['message']

我们后续还要对数据进行清洗处理然后可视化分析,所以这里我们使用openpyxl将数据存储在excel中。

这个应该都是老生常谈了,毕竟之前我们经常都是将数据存储在excel中,

直接看代码

ws = op.Workbook()
wb = ws.create_sheet(index=0)
 
wb.cell(row=1, column=1, value='评论者')
wb.cell(row=1, column=2, value='性别')
wb.cell(row=1, column=3, value='评论时间')
wb.cell(row=1, column=4, value='点赞人数')
wb.cell(row=1, column=5, value='评论内容')
count = 2
 
wb.cell(row=count, column=1, value=name)
wb.cell(row=count, column=2, value=sex)
wb.cell(row=count, column=3, value=content_time)
wb.cell(row=count, column=4, value=star)
wb.cell(row=count, column=5, value=cmts)
count += 1
 
ws.save('哔哩哔哩.xlsx')

效果如下:

 

多页获取

单页数据获取完毕,接下来我们分析多页数据。你们呢一般是如何分析的?

我是直接获取多个url进行对比查找规律

https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_1636423610452&jsonp=jsonp&next=0&type=1&oid=336587753&mode=3&plat=1&_=1636423611589
https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_1636423610453&jsonp=jsonp&next=2&type=1&oid=336587753&mode=3&plat=1&_=1636424178396
https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_1636423610454&jsonp=jsonp&next=3&type=1&oid=336587753&mode=3&plat=1&_=1636424183583
https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_1636423610455&jsonp=jsonp&next=4&type=1&oid=336587753&mode=3&plat=1&_=1636424187787

规律如下:

规律找到了所以我们构造多页链接如下,先获取它个100页~

    for page in range(1, 100 + 1):
        print(f'-----------------正在爬取第{page}页数据-----------------')
        time_thick = int(time.time() * 1000)
        url = f'https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_{1636423610452 + page}&jsonp=jsonp&next={page}&type=1&oid=336587753&mode=3&plat=1&_={time_thick}'

100页数据已经成功存储到excel中,如下:

 

数据预处理

我们先对评论数据先做清洗处理。

去重去空,然后随机抽样五条数据进行展示

# 读取数据
rcv_data = pd.read_excel('哔哩哔哩.xlsx')
 
# 删除重复记录和缺失值
rcv_data = rcv_data.drop_duplicates()
rcv_data = rcv_data.dropna()
 
# 抽样展示
print(rcv_data.sample(5))
 
'''
            评论者  性别              评论时间   点赞人数                                               评论内容
9     Doctor罗洛洛  保密  2021-11-07 10:44  10832         恭喜,寻思啥呢,赶紧把麦克风给大伙放出来 兄弟萌送我上去,点赞里抽两个冠军皮肤记住我
820  变成光守护嘉然的貢品  保密  2021-11-07 02:32    157  路人差不多得了,求各位在宿舍的大爷们,大娘们,别乱叫了,有些淀粉要睡觉,有些不敢看直播的老淀...
960         华为云  保密  2021-11-08 00:22      5                                  热词系列我们是冠军热词系列燃起来了
923     嘉然今天吃华为  保密  2021-11-07 16:09      5                                         点赞抽一个送我大会员
849  我的小鱼你睡着了对吧   女  2021-11-07 02:13    225  那一年的总决赛是对,最终比分31。当时我看见坐在椅子上笑得合不拢嘴,那一刻我就在想如果我能对...
'''

词频展示

我们从评论数据中获取到前十大高频词汇如下:

 # 词频设置
all_words = [word for word in result.split(' ') if len(word) > 1 and word not in stop_words]
wordcount = Counter(all_words).most_common(10)
 
x1_data, y1_data = list(zip(*wordcount))
print(x1_data)
print(y1_data)
 
'''
('冠军', '点赞', '中国', '人送', '年度', '夺冠', '关注', '评论', '个人', '多少')
(749, 687, 470, 315, 254, 220, 151, 149, 141, 123)
'''

分别使用气泡图、树状图、饼图、突出显示表和折线图分别来可视化。

 

词云展示

接下来我们使用stylecloud来生成多样形式的词云

    wordlist = jieba.cut(''.join(c_title))
    result = ' '.join(wordlist)
    pic = 'img1.jpg'
    gen_stylecloud(text=result,
                   icon_name='fab fa-windows',
                   font_path='msyh.ttc',
                   background_color='white',
                   output_name=pic,
                   )
    print('绘图成功!')

 

1. 本文详细介绍了如何使用python获取B站评论信息并且存储处理数据到最后的可视化

有兴趣的读者可以尝试自己动手练习一下。

2. 本文仅供读者学习使用,不做其他用途!

相关文章
|
1月前
|
缓存 Rust 算法
从混沌到秩序:Python的依赖管理工具分析
Python 的依赖管理工具一直没有标准化,主要原因包括历史发展的随意性、社区的分散性、多样化的使用场景、向后兼容性的挑战、缺乏统一治理以及生态系统的快速变化。依赖管理工具用于处理项目中的依赖关系,确保不同环境下的依赖项一致性,避免软件故障和兼容性问题。常用的 Python 依赖管理工具如 pip、venv、pip-tools、Pipenv、Poetry 等各有优缺点,选择时需根据项目需求权衡。新工具如 uv 和 Pixi 在性能和功能上有所改进,值得考虑。
91 35
|
2月前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品消费模式分析的深度学习模型
使用Python实现智能食品消费模式分析的深度学习模型
157 70
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
71 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
1月前
|
数据采集 数据可视化 数据挖掘
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
本文探讨了金融资产波动率建模中的三种主流方法:GARCH、GJR-GARCH和HAR模型,基于SPY的实际交易数据进行实证分析。GARCH模型捕捉波动率聚类特征,GJR-GARCH引入杠杆效应,HAR整合多时间尺度波动率信息。通过Python实现模型估计与性能比较,展示了各模型在风险管理、衍生品定价等领域的应用优势。
299 66
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
|
3月前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
27天前
|
并行计算 安全 Java
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
在Python开发中,GIL(全局解释器锁)一直备受关注。本文基于CPython解释器,探讨GIL的技术本质及其对程序性能的影响。GIL确保同一时刻只有一个线程执行代码,以保护内存管理的安全性,但也限制了多线程并行计算的效率。文章分析了GIL的必要性、局限性,并介绍了多进程、异步编程等替代方案。尽管Python 3.13计划移除GIL,但该特性至少要到2028年才会默认禁用,因此理解GIL仍至关重要。
124 16
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
|
1月前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
86 37
Python时间序列分析工具Aeon使用指南
|
1月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
83 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
2月前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品消费习惯分析的深度学习模型
使用Python实现智能食品消费习惯分析的深度学习模型
189 68
|
1月前
|
数据采集 缓存 API
python爬取Boss直聘,分析北京招聘市场
本文介绍了如何使用Python爬虫技术从Boss直聘平台上获取深圳地区的招聘数据,并进行数据分析,以帮助求职者更好地了解市场动态和职位需求。

热门文章

最新文章