1. 首页
  2. 杂谈

Python 爬取「后浪」弹幕,看看大家都在说什么

点击数:4

Python 爬取「后浪」弹幕,看看大家都在说什么

前天,正好是五四青年节, B 站的一条献给年轻人的视频「后浪」火了,一时间到处都是各种讨论「后浪」的声音。

其他的平台先不管,先看看 B 站平台本身用户对「后浪」的评价。

B 站的评论是弹幕的形式,想要知道 B 站用户的评价,就是要对弹幕做一次分析。

接下来的事情就简单了,打开 B 站,分析一波请求,然后把弹幕的数据抓取下来,最后做个简单的分析。

整个事情就是这么的朴实无华。

分析的过程就不演示了,直接从关键的节点开始介绍。

第一步是获取视频的 cid ,这个 id 是通过链接: https://api.bilibili.com/x/player/pagelist 来获取的,链接的格式:

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

这里的 bvid 由视频地址获取。

Python 爬取「后浪」弹幕,看看大家都在说什么

代码如下:

import requests

res = requests.get("https://api.bilibili.com/x/player/pagelist?bvid=BV1FV411d7u7&jsonp=jsonp")
cid = res.json()['data'][0]['cid']

这样我们就获取到了 cid ,接下来再通过另一个接口获取弹幕信息,接口的格式:

https://api.bilibili.com/x/v1/dm/list.so?oid=xxxx

这里 oid 的值就是我们刚才获取的 cid ,把刚才获取到的 cid 拼入链接,在浏览器中看下结果:

Python 爬取「后浪」弹幕,看看大家都在说什么

是一份 xml 格式的文档,这里我也懒得再去找 xml 解析器了,直接使用正则匹配,将我们需要的信息提取出来,代码接着往下写:

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)

这样,我们获得了一个弹幕的数组。

本次只是想看下评论的大体情况,比较好的方式是使用词云图,接下来我们使用 WordCloud 库来生成词云图。

没有安装 WordCloud 库的同学可以使用命令进行安装:

pip install WordCloud

如果已经安装过的同学可以接着写代码了:

wordcloud = wordcloud.WordCloud(font_path='msyh.ttc', width=900, height=1600).generate("".join(danmu_list))
wordcloud.to_file('wordcloud.png')

结果就是下面这个样子:

Python 爬取「后浪」弹幕,看看大家都在说什么

从我们自己生成的词云图中可以看出,大多数的弹幕都是对「后浪」的评价都是赞美居多。

评论区的评论我只翻了几页,实在是太多了,根本不可能手动全翻完。巧合的是,前几页还基本上都是赞美。

这明显是有幸存者偏差的嘛,怎么可能一个作品全都是一边倒的赞美,完全不信的好伐。

然后我一顿找,找到了原因, B 站的评论默认是按照热度来排序的,前面的评论基本上都是一些官方号的评论,个人的评论都被挤到后面去了。

换成了按照时间排序,瞬间评论区就变样了,不过很正常,一千个人眼中有一千个哈姆雷特,每个人对作品的理解和看法不同,都是可以接受的。

反对意见的人主要集中在两点:

  • 一点是视频其中所展示的内容大都不够普通,高空跳伞、环游世界、穿汉服跳舞、电竞捧杯……这些具有视觉冲击力的内容都太过美好,因而大量的声音在讽刺自己是被淘汰的后浪。
  • 还有一点是 B 站有 1.3 亿年轻人,过着平凡生活分享普通人生的人也不在少数,外卖小哥、工地女孩也都是活跃在B站上的年轻人,但B站没有选择展示他们,确实是对所谓「青年宣言」的重量看得太轻了。

Python 爬取「后浪」弹幕,看看大家都在说什么

不过我不持有任何观点,静静的看别人吃瓜就好。

转载声明:本博客由极客挖掘机创作,采用 CC BY 3.0 CN 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

QR code