MOJITO 发布一周,爬一波弹幕分析下

MOJITO 发布一周,爬一波弹幕分析下

MOJITO

最近一直啥都没写,追个热点都赶不上热乎的,鄙视自己一下。

周董的新歌 「MOJITO」 发售(6 月 12 日的零点)至今大致过去了一周,翻开 B 站 MV 一看,播放量妥妥破千万,弹幕破十万,这人气还真是杠杠的。

MOJITO 发布一周,爬一波弹幕分析下

说实话, 「MOJITO」 这个名字对我来讲有点超纲了,第一次见到完全不知道啥意思。

不过问题不大,没有什么是百度解决不了的,如果有,那就再加一个知乎。

MOJITO 的中文名是莫吉托,百度百科上是这么介绍莫吉托的:

莫吉托(Mojito)是最有名的朗姆调酒之一。起源于古巴。传统上,莫吉托是一种由五种材料制成的鸡尾酒:淡朗姆酒、糖(传统上是用甘蔗汁)、莱姆(青柠)汁、苏打水和薄荷。最原始的古巴配方是使用留兰香或古巴岛上常见的柠檬薄荷。莱姆(青柠)与薄荷的清爽口味是为了与朗姆酒的烈性相互补,同时也使得这种透明无色的调酒成为夏日的热门饮料之一。这种调酒有着相对低的酒精含量(大约10%)。

酒精度数在 10% 左右的话,姑且可以认为一种饮料吧。

当然,如果要开车的话就不能把 MOJITO 当成饮料了,酒精含量再低那也是酒精。

MOJITO 发布一周,爬一波弹幕分析下

整个 MV 我翻来覆去的看了好几遍, 「MOJITO」 这个东西除了在歌词和名字中有出现,在 MV 当中一次都没出现,毫无存在感。

MOJITO 发布一周,爬一波弹幕分析下

爬取 B 站弹幕

弹幕数据的爬取比较简单,我就不一步一步的抓请求给各位演示了,注意下面这几个请求连接:

弹幕请求地址:

https://api.bilibili.com/x/v1/dm/list.so?oid=XXX https://comment.bilibili.com/XXX.xml

第一个地址由于 B 站的网页做了更换,现在在 Chrome 工具的 network 里面已经找不到了,不过还可以用,这个是我之前找到的。

第二个地址来源于百度,我也不知道各路大神是从哪找出来这个地址的,供参考吧。

上面这两个弹幕地址实际上都需要一个叫 oid 的东西,这个 oid 获取方式如下:

首先可以找到一个目录页接口:

https://api.bilibili.com/x/player/pagelist?bvid=XXX&jsonp=jsonp

这个接口也是来源于 Chrome 的 network ,其中 bvid 这个参数来源于视频地址,比如周董的这个 「MOJITO」 的 MV ,地址是 https://www.bilibili.com/video/BV1PK4y1b7dt ,那么这个 bvid 的值就是最后那一部分 BV1PK4y1b7dt 。

MOJITO 发布一周,爬一波弹幕分析下

接下来在 https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp 这个接口中,我们可以看到返回的 json 参数,如下:

{ "code":0, "message":"0", "ttl":1, "data":[ { "cid":201056987, "page":1, "from":"vupload", "part":"JAY-MOJITO_完整MV(更新版)", "duration":189, "vid":"", "weblink":"", "dimension":{ "width":1920, "height":1080, "rotate":0 } } ] }

注意:由于这个 MV 只有一个完整的视频,所以这里只有一个 cid ,如果一个视频是分不同小节发布的,这里就会有多个 cid ,不同的 cid 代表不同的视频。

当然,这里的 cid 就是我们刚才想找的那个 oid ,把这个 cid 拼到刚才的链接上,可以得到 https://api.bilibili.com/x/v1/dm/list.so?oid=201056987 这样一个地址,然后输入到浏览器中,可以看到弹幕的返回数据,是一个 xml 格式的文本。

MOJITO 发布一周,爬一波弹幕分析下

源代码如下:

import requests import re # 获取 cid res = requests.get("https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp") cid = res.json()['data'][0]['cid'] # 将弹幕 xml 通过正则取出,生成 list danmu_url = f"https://api.bilibili.com/x/v1/dm/list.so?oid={cid}" result = requests.get(danmu_url).content.decode('utf-8') pattern = re.compile('<d.*?>(.*?)</d>') danmu_list = pattern.findall(result) # 将弹幕 list 保存至 txt 文件 with open("dan_mu.txt", mode="w", encoding="utf-8") as f: for item in danmu_list: f.write(item) f.write("\n")

这里我将获取到的弹幕保存在了 dan_mu.txt 文件中,方便后续分析。

绘制词云图

第一步先将刚才保存在 dan_mu.txt 文件中的弹幕读取出来,放到了一个 list 当中:

# 读取弹幕 txt 文件 with open("dan_mu.txt", encoding="utf-8") as f: txt = f.read() danmu_list = txt.split("\n")

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzydp.html