前言

最近这2020的奥运会终于开启啦,不过嘛,还是咱们08年的奥运会大气!!!????

而且早早就传来了好消息!


杨倩在女子十米气步枪决赛夺得首金,东京奥运会现场首先奏响中国国歌!

让《义勇军进行曲》响彻东京!!!


视频地址 ????:

​https://www.bilibili.com/video/BV1nB4y1K7P7​

太有牌面了!!

python爬取奥运会弹幕_词云img

那今天4ye就用 ​​python​​ 来爬一下咱们《2008北京奥运会开幕式》这个视频????

看到这画卷!又勾起初见时的回忆,实在是太震撼了!!祖国牛逼!!

python爬取奥运会弹幕_读取数据_02image-20210724181305195

页面分析

这就开始我们此次的爬虫之旅????

可以发现页面的右下脚有个 查看历史弹幕 的按钮,通过点击它可能触发一些查询操作。

所以我们要通过 ​​F12​​ 打开浏览器的控制台,来验证我们的猜测(打开后再去点击按钮)

python爬取奥运会弹幕_词云_03image-20210724101940907

点击后,可以发现控制台多了一系列可疑的 ​​API​​​ 操作,而且 ​​response​​ 的数据是乱码????

python爬取奥运会弹幕_读取数据_04image-20210724101155553

这就有点头大了????

python爬取奥运会弹幕_读取数据_05img

不过转念一想,这前端肯定有钥匙呀~

解密之路

这一步就需要有很大的耐心了~ 得去好好分析下这个js的调用栈

python爬取奥运会弹幕_词云_06img

就不多赘述了,过程太折磨了~ 咱们直接看结果叭????

python爬取奥运会弹幕_github_07image-20210724100218587python爬取奥运会弹幕_词云_08image-20210724100054479

可以看到这里将流数据读取到无符号数组 ​​Unit8Array​​ 中,其中经过一些算法,对其进行移位操作等,获取出 Unicode 编码 ,再配合 ​​String.fromCharCode.apply(String, a)​​ 将其转换成字符串,最终展现出来。

验证

python爬取奥运会弹幕_词云_09image-20210724110454024

到了这一步,我们已经可以获取到这个弹幕了,那么接下来就是将要将这个读取数据并解密的操作封装起来????

python爬取奥运会弹幕_读取数据_10img

这对于菜鸡的我还是太难了???? 于是…… 就只能上网搜搜有啥好的解决办法了

神仙文档

这是什么神仙文档!!????

地址 ????:https://www.moyu.moe/bilibili-api/#/

python爬取奥运会弹幕_词云_11image-20210724114110513

这下直接爬到巨人肩膀上了 哈哈哈,起飞????

python爬取奥运会弹幕_读取数据_12img

获取弹幕

阅读文档后,我立刻发现我想要的,还有很多其他的功能,小伙伴们可以自行探索!????

python爬取奥运会弹幕_读取数据_13image-20210724114618092

安装 bilibili-api

pip install bilibili-api

运行结果

运行上面简单的几行代码,就可以获取到弹幕了????

python爬取奥运会弹幕_读取数据_14image-20210724114924766

词云

那么,现在弹幕也有了,那我们只需要对它进行可视化操作就好啦!

这里选择一个自然语言处理基本工具 ​​jieba​​ , 然后配合着词云​wordcloud​​ 使用即可????

用法和之前写过的这篇类似

文章地址(可点击) ????:​​情窦初开,原来喜欢这么可爱的​

文档介绍(可点击) ????:https://github.com/fxsjy/jieba

代码

我们将上面的弹幕保存到文本文件中,就不用每次都去爬取了,然后可以挑选图片,用词云来生成~

注意要将中文字体包放在相应的目录下,不然会显示不出来????

# -*- coding: utf-8 -*-
"""
 * @author  Java4ye
 * @微信公众号: Java4ye
 * @GitHub https://github.com/RyzeYang
 * @博客 https://blog.csdn.net/weixin_40251892
"""


from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud, STOPWORDS


###当前文件路径
d = path.dirname(__file__)

# Read the whole text.
file = open(path.join(d, 'OlympicGames_dm.txt'), encoding='utf-8').read()
##进行分词
#刚开始是分完词放进txt再打开却总是显示不出中文很奇怪
default_mode =jieba.cut(file)
text = "\r".join(default_mode)
alice_mask = np.array(Image.open(path.join(d, "panda.png")))
stopwords = set(STOPWORDS)
wc = WordCloud(
    #设置字体,不指定就会出现乱码,这个字体文件需要下载
    font_path=r'msyh.ttf',
    background_color="white",
    max_words=2000,
    mask=alice_mask,
    stopwords=stopwords)
# generate word cloud
wc.generate(text)

# store to file
wc.to_file(path.join(d, "panda_result.jpg"))

# show
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.figure()
plt.imshow(alice_mask, cmap=plt.cm.gray, interpolation='bilinear')
plt.axis("off")
plt.show()

最终结果

正如大字所示!愿祖国繁荣昌盛!!中国加油!!

python爬取奥运会弹幕_github_15panda_result_dm

使用的图片

python爬取奥运会弹幕_github_16panda_dm

总结

来到熟悉的环节,画个图总结下此次的爬虫之旅叭~ ????

python爬取奥运会弹幕_github_17image-20210724190838355

温馨提示

别忘了,我们现在有大佬写好的库文件,可以从中了解到要怎么读取数据并将解密的操作一起封装起来了,所以有了轮子也别忘了要怎么造轮子呀????

python爬取奥运会弹幕_github_18img

最后

欢迎小伙伴们来一起探讨问题~


如果你觉得本篇文章还不错的话,那拜托再点点赞支持一下呀????

让我们开始这一场意外的相遇吧!~

欢迎留言!谢谢支持!ヾ(≧▽≦*)o 冲冲冲!!

我是4ye 咱们下期应该……很快再见!! ????


让《义勇军进行曲》响彻东京!!!

中国加油!???? O(∩_∩)O