综艺节目《哈哈哈哈哈》最近有点火,教你爬取他的弹幕并绘制词云图,看看为什么这么火

2021-08-05 11:55:49 浏览数 (1)

Hi~大家好,我是锋小刀。

不知道大家看视频有没有看弹幕的习惯,弹幕在一定的程度上反映了观众对视频的看法。通过分析弹幕,我们可以快速直观的知道观众对视频的看法。

本文以爬取综艺节目《哈哈哈哈哈》最新一期视频弹幕并绘制词云图为例,介绍爬取过程和绘制词云图。

一、分析网站

首先通过以下步骤找到存放弹幕的真实url:

通过分析url我们发现,url中的timestamp参数是会发生递增变化的,视频播放30秒变动一次,每次增加30秒,而视频一共3634秒,这里我们用{}进行替换。

代码语言:javascript复制
https://mfm.video.qq.com/danmu?otype=json&callback=jQuery191039612593184238554_1608529693193&target_id=6296183376&vid=n0035xx89ka&session_key=15076,0,1608530041&timestamp=15&_=1608529693224
https://mfm.video.qq.com/danmu?otype=json&callback=jQuery191039612593184238554_1608529693193&target_id=6296183376&vid=n0035xx89ka&session_key=15076,0,1608530041&timestamp=45&_=1608529693224
https://mfm.video.qq.com/danmu?otype=json&callback=jQuery191039612593184238554_1608529693193&target_id=6296183376&vid=n0035xx89ka&session_key=15076,0,1608530041&timestamp=85&_=1608529693224

另外,url中一些参数是没用的,我们可以适当删除,得到以下url:

代码语言:javascript复制
https://mfm.video.qq.com/danmu?otype=json&target_id=6296187536&vid=e003555vftp&session_key=19888,0,1608536585&timestamp={}&_=1608536580786

而数据格式为json格式,因此直接用json解析获取数据。

二、代码实现

代码语言:javascript复制
import pandas as pd
import time
import requests
import json

df = pd.DataFrame()
headers = {'User-Agent': 'Googlebot'}
for i in range(15, 3645, 30):
    url = "https://mfm.video.qq.com/danmu?otype=json&target_id=6296187536&vid=e003555vftp&session_key=19888,0,1608536585&timestamp={}&_=1608536580786".format(i)
    html = requests.get(url, headers=headers).text
    t = json.loads(html)   #解析数据
    time.sleep(1)
    for i in t['comments']:    #提取数据
        content = i['content']  
        text = pd.DataFrame({'弹幕': [content]})   #创建标题行
        df = pd.concat([df, text])    #将数据存储在DataFrame中
df.to_csv('哈哈哈哈哈.csv', encoding='utf-8')    #保存数据

运行后看下数据:

三、绘制词云图

导入库:

代码语言:javascript复制
import jieba   # 分词
import numpy as np    # 矩阵运算
from matplotlib import pyplot as plt    # 绘图,数据可视化
from wordcloud import WordCloud   # 词云
from PIL import Image   # 图片处理

读取文本内容,read按行读取:

代码语言:javascript复制
text = open(r'.哈哈哈哈哈.csv', 'r', encoding="utf-8").read()

分词:

代码语言:javascript复制
cut_text = jieba.cut(text)

join一下连接成字符串:

代码语言:javascript复制
result = ' '.join(cut_text)

导入图片:

代码语言:javascript复制
img=Image.open(r'.哈哈哈.jpg')

处理图片:

代码语言:javascript复制
img_array = np.array(img)

设置字体、背景颜色:

代码语言:javascript复制
wc = WordCloud(mask=img_array, font_path=r'.simhei.ttf', background_color='white')

生成词云图:

代码语言:javascript复制
wc.generate(result)

保存词云图:

代码语言:javascript复制
wc.to_file(r'.哈哈哈哈哈.jpg')

展示词云图:

代码语言:javascript复制
plt.imshow(wc)

关闭坐标轴:

代码语言:javascript复制
plt.axis('off')

运行后打开词云图:

代码语言:javascript复制
plt.show()

运行后看一下效果,发现词语“哈哈”出现频率是最高的,看来节目是很搞笑的,果然节目名称没有取错,其次是“邓紫棋”、“鹿晗”、“王晨艺”、“张雨剑”等节目嘉宾。

换张图片看下:

绘制词云图的代码是可以重复利用的,只要换下图片、弹幕数据就可以了。

0 人点赞