前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >综艺节目《哈哈哈哈哈》最近有点火,教你爬取他的弹幕并绘制词云图,看看为什么这么火

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

作者头像
Python与Excel之交
发布2021-08-05 11:55:49
5830
发布2021-08-05 11:55:49
举报
文章被收录于专栏:Python与Excel之交

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

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

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

一、分析网站

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

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

代码语言:javascript
复制
https://mfm.video.qq.com/danmu?otype=json&callback=jQuery191039612593184238554_1608529693193&target_id=6296183376%26vid%3Dn0035xx89ka&session_key=15076%2C0%2C1608530041&timestamp=15&_=1608529693224
https://mfm.video.qq.com/danmu?otype=json&callback=jQuery191039612593184238554_1608529693193&target_id=6296183376%26vid%3Dn0035xx89ka&session_key=15076%2C0%2C1608530041&timestamp=45&_=1608529693224
https://mfm.video.qq.com/danmu?otype=json&callback=jQuery191039612593184238554_1608529693193&target_id=6296183376%26vid%3Dn0035xx89ka&session_key=15076%2C0%2C1608530041&timestamp=85&_=1608529693224

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

代码语言:javascript
复制
https://mfm.video.qq.com/danmu?otype=json&target_id=6296187536%26vid%3De003555vftp&session_key=19888%2C0%2C1608536585&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%26vid%3De003555vftp&session_key=19888%2C0%2C1608536585&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()

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

换张图片看下:

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与Excel之交 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云图数据可视化
腾讯云图数据可视化(Tencent Cloud Visualization) 是一站式数据可视化展示平台,旨在帮助用户快速通过可视化图表展示大量数据,低门槛快速打造出专业大屏数据展示。精心预设多种行业模板,极致展示数据魅力。采用拖拽式自由布局,全图形化编辑,快速可视化制作。腾讯云图数据可视化支持多种数据来源配置,支持数据实时同步更新,同时基于 Web 页面渲染,可灵活投屏多种屏幕终端。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档