可以看到词云主要围绕的是"姐姐"、"节目"、"女团"展开。其中在需选手中宁静、万茜被提到的频率最高。
当然也有不少吐槽的点,大家的吐槽主要集中在:
评委杜华:不公平;30 的女性岁月积淀了魅力,评审却按照20岁女团的标准来;给丁当打分真是要气炸。
黄晓明:从霸道总裁秒怂变小明,让人感觉尴尬不已
节目组:场景布置令人寒酸,摄影差,灯光差,布景差。
也有吐槽选手的
黄圣依:等黄圣依淘汰了我再改成五星,谢谢。
04Python分析9万条弹幕
谁才是真正的C位一姐?
我们统计了芒果tv第一期的弹幕数据,共94575条。
下面展示芒果Tv弹幕爬虫部分代码,分析部分代码暂略。数据获取的具体思路如下:
分析网页,弹幕数据是动态加载的,因此通过Chrome浏览器进行抓包分析并获取真实的URL请求地址;
使用selenium请求网页数据;
使用正则表达式re将文本中的HTML提取出来,使用json进行解析;
使用pandas进行数据的保存。
1. 弹幕在哪里找?
打开《乘风破浪的姐姐》选取一集,观看我们要抓取的弹幕,可以看出弹幕是在视频播放之后才滚动加载的,所以我们可以判断视频是通过JS异步加载的。
按照经验,我们切换到network-XHR下面查看,如下图所示,很容易发现了弹幕请求的地址:
https://bullet-ws.hitv.com/bullet/2020/06/21/104556/8337559/0.json
其中:2020/06/21代表日期,104556和8337559参数每集不一样,通过抓包获取即可。
2. 获取并解析数据
具体代码如下:
# 导入包
import pandas as pd
import time
import re
import json
from selenium import webdriver
# 打开Chrome(需配置webdriver)
browser = webdriver.Chrome()
def get_mgtv_danmu(month_num, day_num, num1, num2):
step = 1
df_all = pd.DataFrame()
while True:
try:
# 第一集URL
danmu_url = 'https://bullet-ws.hitv.com/bullet/2020/{}/{}/{}/{}/{}.json'.format(month_num, day_num, num1, num2, step)
# 打印进度
print('正在获取第{}页的信息'.format(step))
step = 1
# 获取弹幕
browser.get(danmu_url)
# 休眠3秒
time.sleep(3)
# 提取数据
pattern1 = re.compile(r'<html><head></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">')
pattern2 = re.compile(r'</pre></body></html>')
data1 = re.sub(pattern1, '', browser.page_source)
data2 = re.sub(pattern2, '', data1)
# 解析数据
js_data = json.loads(data2)
# 获取数据
all_data = js_data['data']['items']
# id
danmu_id = [i.get('id') for i in all_data]
# uname
uname = [i.get('uname') for i in all_data]
# 内容
content = [i.get('content') for i in all_data]
# 时间
danmu_time = [i.get('time') for i in all_data]
# 点赞
up_count = [i.get('v2_up_count') for i in all_data]
# 分钟
danmu_minites = step-1
# 保存数据
df_one = pd.DataFrame({
'danmu_id': danmu_id,
'uname': uname,
'content': content,
'danmu_time': danmu_time,
'up_count': up_count,
'danmu_minites': danmu_minites
})
# 循环追加
df_all = df_all.append(df_one, ignore_index=True)
except Exception as e:
print(e)
print('没有此页面, 爬虫结束')
break
return df_all
if __name__ == '__main__':
#
df_1 = get_mgtv_danmu(month_num='06', day_num='21', num1=104556, num2=8337559)
获取的数据以数据表的形式存储,如下所示:
df.head()
03 结论部分
选手弹幕热度排名
在排名数据上,占据前四位的分别是宁静、万茜、吴昕和张雨绮。
下面,分别看到她们的个人弹幕词云图。
宁静-弹幕词云