「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!」
本文正在参加「Python主题月」,详情查看 活动链接
前言
最近这2020的奥运会终于开启啦,不过嘛,还是咱们08年的奥运大气!!!😝
而且早早就传来了好消息!
杨倩在女子十米气步枪决赛夺得首金,东京奥运会现场首先奏响中国国歌!
让《义勇军进行曲》响彻东京!!!
视频地址 👇:
太有牌面了!!
那今天4ye就用 python 来爬一下咱们《2008北京奥运会开幕式》这个视频😝
看到这画卷!又勾起初见时的回忆,实在是太震撼了!!祖国牛逼!!
页面分析
这就开始我们此次的爬虫之旅😄
可以发现页面的右下脚有个 查看历史弹幕 的按钮,通过点击它可能触发一些查询操作。
所以我们要通过 F12 打开浏览器的控制台,来验证我们的猜测(打开后再去点击按钮)
点击后,可以发现控制台多了一系列可疑的 API 操作,而且 response 的数据是乱码🙃
这就有点头大了🐷
不过转念一想,这前端肯定有钥匙呀~
\
解密之路
这一步就需要有很大的耐心了~ 得去好好分析下这个js的调用栈
就不多赘述了,过程太折磨了~ 咱们直接看结果叭😄
可以看到这里将流数据读取到无符号数组 Unit8Array 中,其中经过一些算法,对其进行移位操作等,获取出 Unicode 编码 ,再配合 String.fromCharCode.apply(String, a) 将其转换成字符串,最终展现出来。
验证
到了这一步,我们已经可以获取到这个弹幕了,那么接下来就是将要将这个读取数据并解密的操作封装起来🐷
这对于菜鸡的我还是太难了🙃 于是…… 就只能上网搜搜有啥好的解决办法了
神仙文档
这是什么神仙文档!!😍
地址 👉: www.moyu.moe/bilibili-ap…
这下直接爬到巨人肩膀上了 哈哈哈,起飞😝
获取弹幕
阅读文档后,我立刻发现我想要的,还有很多其他的功能,小伙伴们可以自行探索!😄
安装 bilibili-api
pip install bilibili-api
运行结果
运行上面简单的几行代码,就可以获取到弹幕了😄
词云
那么,现在弹幕也有了,那我们只需要对它进行可视化操作就好啦!
这里选择一个自然语言处理基本工具 jieba , 然后配合着词云 wordcloud 使用即可😝
用法和之前写过的这篇类似
文章地址(可点击) 👉: 情窦初开,原来喜欢这么可爱的
文档介绍(可点击) 👉: 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()
最终结果
正如大字所示! 愿祖国繁荣昌盛!! 中国加油!!
使用的图片
总结
来到熟悉的环节,画个图总结下此次的爬虫之旅叭~ 😄
温馨提示
别忘了,我们现在有大佬写好的库文件,可以从中了解到要怎么读取数据并将解密的操作一起封装起来了,所以有了轮子也别忘了要怎么造轮子呀😄
最后
欢迎小伙伴们来一起探讨问题~
如果你觉得本篇文章还不错的话,那拜托再点点赞支持一下呀😝
让我们开始这一场意外的相遇吧!~
欢迎留言!谢谢支持!ヾ(≧▽≦*)o 冲冲冲!!
我是4ye 咱们下期应该……很快再见!! 😆