前言
最近这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-20210724100218587image-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 咱们下期应该……很快再见!! ????