> 文档中心 > 用python分析《大侦探第七季之蔷薇下的罪恶》的90000条弹幕

用python分析《大侦探第七季之蔷薇下的罪恶》的90000条弹幕

大家应该都知道密室逃脱吧,最近有个综艺节目叫《大侦探》,是一个解密找线索类得综艺节目,那可谓是刻刻激动人心,非常的nice呀。借此,我爬取了《大侦探之蔷薇下得罪恶》这篇得90000条弹幕,来分析大家弹幕都说了啥!

一、爬虫

芒果TV的的弹幕是动态加载的,所以它的表面网站并不能提取出来弹幕,我们可以右键网页检查源代码,查看network中的XHR选项找到真实的url(https://bullet-ws.hitv.com/bullet/2022/04/22/154401/15873099/{i}.json),是json字典格式数据,从这里可以观察到网页变化(页码.json),因此我们可以直接利用json()函数进行提取数据。而最大的页码是由视频的时常得来,《大侦探蔷薇下的罪恶》的时常为91.21分,向上取整92,最大页码为92页。具体爬取方法如下:
import requestsimport pandas as pdheaders = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"    }  df = pd.DataFrame()for i in range(0, 92):    url = 'https://bullet-ws.hitv.com/bullet/2022/04/22/154401/15873099/{}.json'    respose = requests.get(url.format(i), headers=headers)    # json格式 直接用json提取数据    for j in respose.json()['data']['items']: ids = j['ids']  # 用户id content = j['content']  # 弹幕内容 time = j['time']  # 弹幕发生时间 text = pd.DataFrame({'ids': [ids], '弹幕': [content], '发生时间': [time]}) df = pd.concat([df, text])df.to_csv('大侦探蔷薇下的罪恶弹幕_上.csv', encoding='utf-8-sig', index=False)    

爬取出来的数据长这个样子
用python分析《大侦探第七季之蔷薇下的罪恶》的90000条弹幕

二、分析

1、读取数据

# 读取数据并处理danmu1 = pd.read_csv('大侦探蔷薇下的罪恶弹幕_中.csv',encoding='utf-8-sig',sep=',')danmu2 = pd.read_csv('大侦探蔷薇下的罪恶弹幕_下.csv',encoding='utf-8-sig',sep=',')danmu3 = pd.read_csv('大侦探蔷薇下的罪恶弹幕_上.csv',encoding='utf-8-sig',sep=',')danmu = pd.concat([danmu1,danmu2,danmu3],axis=0).reset_index().drop(['index','ids'],axis=1)danmu结果如下:弹幕  发生时间0是不是通过自己自杀 来让其他人陪葬01甄是自杀的吧 邮件是鸥发的 让他们忏悔他们的堆+02甄是自杀的吧 邮件是鸥发的 让他们忏悔他们的堆+03爱了爱了04噗噗诶~柚子的维尼也叫噗噗0.........82650白白去拍剧去了吗?没空来了?544900082651第一版《无罪说》yyds545056582652我的无罪说啊啊啊545699082653爱死明侦啦547523582654考研上岸呀548029582655 rows × 2 columns

2、分词并去除停用词

import jieba  # 分词 库from wordcloud import WordCloud # 词云图import collections # 对分词计数用# 读取停用词数据  停用词从网上下载的百度停词库stopwords = pd.read_csv('D:/搜狗高速下载/stopwords-master/baidu_stopwords.txt', encoding='utf8', names=['stopword'], index_col=False)# 停用词转为列表stop_list = stopwords['stopword'].tolist()# 弹幕转为字符串str1 = ''.join(danmu['弹幕'])# 将弹幕分割成词text = jieba.cut(str1)result_list= []for word in text:  # 对每个分割后的词语进行遍历筛选:词长度>1 且不在停用词中    if word not in stop_list and len(word) > 1: result_list.append(word)result_list   # 分割后的词长这样:['自杀', '其他人', '陪葬', '甄是', '自杀', '邮件', '忏悔', '甄是', '自杀',

3、对出现次数最多的前100个词语进行词云图展示

# 筛选后统计word_counts = collections.Counter(result_list)# 获取前100最高频的词word_counts_top100 = word_counts.most_common(100)print(word_counts_top100)# 最火的100个词语[('哈哈哈', 6663), ('老师', 4373), ('真的', 3121), ('侦探', 2859), ('哈哈哈哈', 2821), ('一个', 2322), ('女人', 1831), ('这期', 1735), ('凶手', 1548), ('阿蒲', 1520), ('张若昀', 1456), ('感觉', 1429), ('女生', 1275), ('病娇', 1160), ('现实', 1115), ('恶人', 978), ('女性', 947), ('一期', 943), ('自杀', 913), ('人设', 898), ('全员', 877), ('保护', 759), ('妈宝', 740), ('理解', 740), ('妈妈', 738), ('喜欢', 717), ('角色', 694), ('故事', 688), ('雨衣', 665), ('啊啊啊', 621), ('好像', 614), ('可爱', 591), ('别人', 573),('封神', 569), ('凤凰', 567), ('好人', 565), ('好帅', 561), ('有人', 560), ('仪式', 547), ('希望', 539), ('死者', 538), ('蔷薇', 533), ('上位', 528), ('世界', 505), ('朋友', 504), ('完美', 487), ('发现', 473), ('控制', 472), ('好看', 471), ('受害者', 458), ('救命', 435), ('肯定', 434), ('蒲鱼', 430), ('兔子', 429), ('变态', 426), ('剧本', 413), ('身份', 413), ('小蒲', 410), ('终于', 395), ('三个', 388), ('第一次', 385), ('伤害', 382), ('无辜', 378), ('女孩子', 378), ('剧情', 375), ('所有人', 375), ('浑浊', 375), ('呜呜', 362), ('打卡', 358), ('想到', 354), ('回来', 353), ('甄是', 352), ('两个', 348), ('同歌', 344), ('网络', 342), ('高能', 341), ('嫌疑人', 339), ('戚薇', 334), ('未知', 332), ('男性', 328), ('确实', 326), ('担心', 324), ('真人', 323), ('情商', 323), ('报仇', 318), ('吴昕', 317), ('好好看', 309), ('镜头', 308), ('一案', 304), ('可怕', 303), ('大案', 299), ('厉害', 296), ('时间', 294), ('这是', 294), ('事情', 289), ('合同', 289), ('雪花', 286), ('有没有', 285), ('人类', 285), ('弹幕', 283)]
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] =['Microsoft YaHei']plt.rcParams['axes.unicode_minus'] = Falsemy_cloud = WordCloud(    background_color='black',  # 设置背景颜色  默认是black    width=600, height=600,    max_words=200,     # 词云显示的最大词语数量    font_path='simhei.ttf',   # 设置字体  显示中文    max_font_size=99,  # 设置字体最大值    min_font_size=16,  # 设置子图最小值    random_state=50    # 设置随机生成状态,即多少种配色方案).generate_from_frequencies(word_counts)# 显示生成的词云图片plt.figure(figsize=(20,6))plt.imshow(my_cloud, interpolation='bilinear')# 显示设置词云图中无坐标轴plt.axis('off')plt.show()

在这里插入图片描述

4、对出现次数最多的前30个词语进行条形图展示

word_counts_top30 = word_counts.most_common(30)df = pd.DataFrame(word_counts_top30,columns=['word','num'])fig = plt.figure(figsize=(20,8))ax = fig.add_subplot(111)ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)plt.bar(range(30),df['num'],color='blue')plt.xticks(range(30),df['word'],rotation=60,size=15)plt.title('出现次数最多的前30个词',size=15)plt.savefig("出现次数最多的前30个词.jpg")plt.show()

在这里插入图片描述

  • 从词云图和条形图可以看出来,“哈哈哈哈,哈哈哈” 的次数是排在第一位的,这个情节可能还是比较搞笑的,逗得大家乐呵呵。其次就是词语:女性、妈宝、自杀、全员恶人之类的,看起来这剧情刷起来是很爽的。出现的人物名字有张若昀,还是比较火的;还有阿蒲,剧情里的人物,最后自杀了。还是值得推荐的一部推理解密类综艺。