前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手游《航海王热血航线》的评论热词云图怎么做的,今天就手把手教你学废

手游《航海王热血航线》的评论热词云图怎么做的,今天就手把手教你学废

作者头像
可以叫我才哥
发布2021-08-05 15:15:06
4180
发布2021-08-05 15:15:06
举报
文章被收录于专栏:可以叫我才哥可以叫我才哥
我们的第71篇原创

作者:才哥

大家好,我是才哥。

作为海贼迷(不一定是真的),最近有款字节游戏的手游产品《航海王热血航线》上线了,闹的沸沸扬扬,冲到了iOS畅销榜第5。那么作为taptap迷(可能也不一定是真的),我们来一起看看大家都怎么在聊这块产品吧!

图0:航海王热血航线 开服至今评价内容词云

0. 引入需要用到的库

代码语言:javascript
复制
import requests
import pandas as pd
import jieba
import jieba.analyse
from html import unescape
from wordcloud import WordCloud,STOPWORDS
import numpy as np
from PIL import Image
import stylecloud

没有安装就安装一下对应的库即可。

1. 玩家评论采集(爬虫)

本次,我们需要采集的是taptap游戏的评论。

1.1. 页面分析

老规矩,先打开游戏评论部分,然后F12->Network->XHR,再刷新页面或者下滑,在Name中发现真实请求地址

图1:页面分析

如上图,可以发现真实请求地址及需要的参数如下:

代码语言:javascript
复制
# 评论数据请求接口
url = 'https://www.taptap.com/webapiv2/review/v2/by-app'

# pages = 1050
# appid = 195514
# 参数
Parames = {
    'app_id': appid, # 应用id
    'from': page*10, # 评论页数
    'limit': 10, # 每页评论数
    'sort': 'new', # 排序方式(new是最新)
    'X-UA': 'V=1&PN=WebApp&LANG=zh_CN&VN_CODE=3&VN=0.1.0&LOC=CN&PLT=Android&UID=da52e3b7-a393-4a0a-b8c9-9157797114d4&VID=2663941' # 复制就行,看着像平台参数相关的
    }

1.2. 数据解析

由于请求的数据是json格式的,也太好处理了,我们只需要找到想要采集的字段在json里的位置就好解析了。

图2:请求数据预览

1.3. 数据请求

由于不需要做特殊的数据解析处理,这里直接附上完整数据请求代码如下:

代码语言:javascript
复制
def tapReview(appid, pages):
    
    url = 'https://www.taptap.com/webapiv2/review/v2/by-app'
    
    # pages = 1050
    # appid = 195514
    dfList = []
    n = 0
    for page in range(pages):
        Parames = {
            'app_id': appid,
            'from': page*10,
            'limit': 10,
            'sort': 'new',
            'X-UA': 'V=1&PN=WebApp&LANG=zh_CN&VN_CODE=3&VN=0.1.0&LOC=CN&PLT=Android&UID=da52e3b7-a393-4a0a-b8c9-9157797114d4&VID=2663941'
            }
        
        rep = requests.get(url,params=Parames)
        js = rep.json()
        
        data = js['data']
        dataList = data['list']
        items = []
        for li in dataList:
            n = n+1
            item = {}
            moment = li['moment']['extended_entities']['reviews'][0]
            item['评价id'] = li['moment']['id']
            item['作者id'] = moment['author']['id']
            item['作者'] = moment['author']['name']   
            item['评价创建时间'] = moment['created_time']
            item['评价更新时间'] = moment['updated_time']
            item['评价内容'] = unescape(moment['contents']['text'].replace('<br>','\n'))
            item['评分(满分5分)'] = moment['score']
            item['游戏时长'] = moment['played_tips']
            
            items.append(item)
        df = pd.DataFrame(items)
        
        df['评价创建时间'] = pd.to_datetime(df['评价创建时间'],unit='s') + pd.Timedelta(hours=8)
        df['评价更新时间'] = pd.to_datetime(df['评价更新时间'],unit='s') + pd.Timedelta(hours=8)
        
        print(f'{n} 个 评价已经采集')
        dfList.append(df)
    
    dfs = pd.concat(dfList)
    
    return dfs

采集的数据预览:

我们可以看到采集下来的数据很规范,这也是因为改版后的taptap评论数据信息太完善了,直接json格式包含的信息超全,评论创建日期、更新时间等等都有。如果想单独采集这些评论,以上代码就够了。

图3:采集数据预览

2. 评论词云制作(分词+词云)

我们之前介绍过2种词云制作的方法,参考《【推荐收藏】介绍2种Python绘制词云的手法,你会偷偷pick谁呢?》。

这里,采取方法2的stylecloud来进行本次词云绘制,原理不再多讲了,直接代码走起。

先定义一个绘制词云的函数:

代码语言:javascript
复制
def ciYun(data,addWords,stopWords):
    '''
    Parameters
    ----------
    data : list
        需要用于制作词云的文本内容列表.
    addWords : list
        自定义词典列表.
    stopWords : list
        停用词列表.
    Returns
    -------
    None.
    '''
    print('\n正在作图...')
    comment_data = []
    
    for item in data:
        if pd.isnull(item) == False:
            comment_data.append(item)
    # 添加自定义词典 
    for addWord in addWords:
        jieba.add_word(addWord)

    comment_after_split = jieba.cut(str(comment_data), cut_all=False)
    words = ' '.join(comment_after_split)
    
    # 词云停用词 
    stopwords = STOPWORDS.copy()
    for stopWord in stopWords:
        stopwords.add(stopWord)
    # 添加背景图(注意背景图所在目录)
    bg=np.array(Image.open(r"F:\词云\背景图.png"))
    stylecloud.gen_stylecloud(
                              text=words,
                              custom_stopwords = stopwords,
                              palette='tableau.GreenOrange_12', # 设置配色方案
                              # icon_name='fas fa-apple-alt',
                              bg = bg, # 照片为蒙版啦
                              font_path='FZZJ-YGYTKJW.ttf',  # 词云图 字体(中文需要设定为本机有的中文字体)
                             )
    
    print('词云已生成~')

以上函数需要有3个参数,分别是:

  • data :需要用于绘制词云的评论内容列表
  • addWords:自定义词典列表(比如“氪金”可能不在我们常见的词组中,可以手动添加)
  • stopWords:自定义的停用词列表(比如“内测”我不希望显示,可以手动添加到停用词)

再定义一个主函数:

代码语言:javascript
复制
def main():
    # 应用id和评价页数,其中评价页数 = (评价数/10) +1
    df_data = tapReview(195514,1050)
    # 只取4月22日9点开服之后的评论
    df_data = df_data[df_data['评价更新时间']>='2021-04-22 09:00']
 # 获取评论列表
    data = df_data.评价内容.to_list()
    # 自定义关键词词组列表
    addWords = ['氪金',"打击感","航海王",'海贼王','抽卡']
    # 添加停用词(注意停用词文件所在目录)
    stoptxt = pd.read_table(r'C:\Users\gongdc\Desktop\stop.txt',encoding='utf-8',header=None)
    stoptxt.drop_duplicates(inplace=True)
    stopWords = stoptxt[0].to_list()
    # 补充的停用词(根据实际输出结果进行更迭)
    words = ['n','玩','说','做','n2','开','想','更','内测','太','期待','没','少','小时','确实','玩家','级','挺','那种','行','里','中','一款']
    stopWords.extend(words)    
        
    # 运行~
    ciYun(data,addWords,stopWords)
    # 自动打开词云图
    Image.open("stylecloud.png")

以上就是本次 taptap游戏评论词云图制作流程,完整代码可以在后台回复 0426 获取。

注:代码中的应用id和页数你可以自行定义,这样就可以获取不同产品的评论内容和词云制作啦

欢迎大家添加才哥(微信号dxaw142857)好友进行互动交流~

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

本文分享自 可以叫我才哥 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 引入需要用到的库
  • 1. 玩家评论采集(爬虫)
    • 1.1. 页面分析
      • 1.2. 数据解析
        • 1.3. 数据请求
        • 2. 评论词云制作(分词+词云)
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档