《黑神话:悟空》B站弹幕、知乎回答分析
最近行哥看到一部燃爆的游戏试玩短片火遍全网---《黑神话:悟空》,短短四天在B站便获得2100万+播放量。知乎也都在从各个角度评论这款游戏,所以行哥今天分别爬取上万条《黑神话:悟空》在B站的弹幕和知乎的回答,来看看这款游戏的评价到底怎么样
- 1.爬取B站弹幕
- 2爬取知乎回答
- 3.词云分析
- 4.结论
- 5.参考
1.爬取B站弹幕
短短四天,该视频便有2100万+播放量和26万+弹幕,想爬取B站弹幕网上已经有了各种介绍文章,但大多都是利用api进行爬取,有些api也已经不再维护了。
所以行哥今天着重介绍下如何通过抓包--> requests来进行爬取B站弹幕,首先打开采集弹幕的视频,然后F12--> Network
虽然打开弹幕列表只能找到类似弹幕但被加密的数据包,但是我们可以通过点击弹幕列表—>查看历史弹幕,并选择任意一天的历史弹幕,此时就能找到存储该日期弹幕的ajax数据包,所有的弹幕都藏在一个i标签中
利用请求查看弹幕的ResquestURL主要是oid和date两个参数组成的,这两个参数也很轻松能够在数据包中找到,那就可以进行构建URL
def get_url(oid,start,end):
'''
获取指定日期的弹幕
oid:视频oid
start,end:起止日期
'''
url_list = []
date_list = [i for i in pd.date_range(start,end).strftime('%Y-%m-%d')]
for date in date_list:
url = f"https://api.bilibili.com/x/v2/dm/history?type=1&oid={oid}&date={date}"
url_list.append(url)
return url_list
接下来要做的就是使用requests请求网站并使用bs4解析数据,最后将数据写入TXT即可。不过该方法限制每天只能获取1500条弹幕,所以本文爬取了20200820-20200824总共7500条弹幕,核心代码如下,需要全部源码可以在公众号[一行数据]后台回复[黑神话]即可获取
if __name__ == "__main__":
#需要手动设置爬取弹幕的起止日期!
#oid获取说明详见公众号:一行数据
start = '20/8/2020'
end = '24/8/2020'
name = input("请输入视频名称")
oid = input("请输入对应视频oid") # 226204073
# print("========正在爬取弹幕=========")
url_list = get_url(oid, start, end)
get_danmu(url_list, name)
print(f"{name}.txt已生成")
2爬取知乎回答
之前行哥有分享过如何爬取知乎一个问题下所有回答的推文,以下核心代码是利用知乎api进行获取所有4433个回答,如需要全部源码可以在公众号[一行数据]后台回复[黑神话]即可获取
def getAnswers(qid,title):
# 全部源码请关注公众号:一行数据
offset = 0
num = 1
f = open("知乎回答_%s.txt" % title, "a")
while True:
qid = qid
print('Offset =', offset)
# 知乎api请求
data = getAnser(qid, offset)
# print(data)
if len(data['data']) == 0:
break
for line in data['data']:
# print(line)
dr = re.compile(r'<[^>]+>', re.S)
dd = dr.sub('', line['content'])
f.write(dd)
print(dd)
offset += 20
3.词云分析
利用之前行哥分享过的stylecloud工具包,两行代码便可以自动提取文字并生成漂亮的词云图,代码如下:
from stylecloud import gen_stylecloud
gen_stylecloud(file_path='B站弹幕_黑神话.txt',collocations=False,palette='tableau.GreenOrange_6',font_path=r'ziti.ttf',stopwords=False,icon_name='fas fa-thumbs-up',size=400,output_name='b_answer.png')
B站 弹幕词云
知乎回答词云
4.结论
从上图词云可以看到B站弹幕更多的是看到某一处场景直接有感而发“卧槽、起立”,而知乎用户更加理性的引经据典从游戏性、画面、音效等方面进行评价。其中也不外乎有一部分人,在弹幕发表即时感受,然后去知乎进行深入点评
不过总体就是一句:国游崛起、出必买
当然,最近该游戏制作人在微博指出它仍然有很多不足之处,但是对于旁观者来说这可是给国游玩家一剂最猛的强心剂,被游戏耽误的电影公司也不再是暴雪一家,剩下只需要给「游戏科学」足够的时间
5.参考
早起Python | https://mp.weixin.qq.com/s/rQd2nwLktw9kccgQNpNmWw
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 有一次小明传数据给我,把我弄哭了
- Java删除空字符:Java8 & Java11
- 6k+点赞的SpringBoot+Netty分布式即时通讯系统!爱了爱了!
- Day63:数据流中的中位数
- Prometheus是什么?
- Day64:滑动窗口的最大值
- 第10天:NLP补充——朴素贝叶斯(Naive-Bayes)
- Day65:矩阵中的路径
- Day66:机器人的运动范围
- 第11天:NLP补充——主题模式(LDA)
- 一文快速上手Rollup,JavaScript类库打包好帮手
- Day67:剪绳子
- Typecho实现微信发消息:Type时光机
- 插入排序
- Typecho1.1仿简书主题小屏幕菜单栏展开优化