python爬取奥运会弹幕

原创
2021/07/24 19:27
阅读数 0

前言

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

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

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

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

视频地址 👇:

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

太有牌面了!!

img

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

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

image-20210724181305195

页面分析

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

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

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

image-20210724101940907

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

image-20210724101155553

这就有点头大了🐷

img

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

解密之路

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

img

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

image-20210724100218587
image-20210724100054479

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

验证

image-20210724110454024

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

img

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

神仙文档

这是什么神仙文档!!😍

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

image-20210724114110513

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

img

获取弹幕

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

image-20210724114618092

安装 bilibili-api

pip install bilibili-api

运行结果

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

image-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()

最终结果

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

panda_result_dm

使用的图片

panda_dm

总结

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

image-20210724190838355

温馨提示

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

img

最后

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

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

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

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

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

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

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




往期推荐

python实现3d图表,对掘金后端作者进行可视化操作

魔幻的一个早上~ 我也制作出酷炫的二维码啦!

情窦初开,原来喜欢这么可爱的

关于我尝试抓包微信失败后想到的新方法居然和奥特曼有关~

4ye含泪用python爬取了自己的公众号粉丝数据

合成大西瓜之抱歉~ 我只有大西瓜和刀剑神域~!!



本文分享自微信公众号 - Java4ye(Java4ye)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部