再也不用手动复制粘贴收集Taptap游戏评论了,还可以制作好看的热词词云图~

2021-08-05 11:34:48 浏览数 (1)

日常工作中会需要对玩家的一些评价进行整理分析,曾经人肉扫、手工采蛮痛苦的,所以,今天TA来了~

05

目录:

  • 1.引入需要的库
  • 2.评论内容采集
  • 3.热词词云制作
  • 4.程序跑起来

预览

同学们,猜猜以下6款游戏分别是TapTap上面的哪6款产品呢??欢迎在留言区留言哦~ 【我们会在接下来教大家怎么一键生成大家喜爱的游戏产品评论热词词云】

1.引入需要的库

由于我们这里需要采集评论内容,同时对这些评论数据进行分词与热词词云制作,因此需要引入的第三方库较多。考虑到使用者环境的差异性,这里采用pip.main方法,若加载时发现依赖库不存在则自动安装,哇,好方便啊~

代码语言:javascript复制
# 如果需要引用的库未安装,则自动安装 
try:
    import requests
    import pandas as pd
    from bs4 import BeautifulSoup
    import jieba
    import jieba.analyse
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud,STOPWORDS
    import numpy as np
    from PIL import Image
# 使用pip.main()方法进行依赖库的安装(这里穷举了需要用到的库)   
except  ImportError:
    import pip
    pip.main(["install", "--user", "requests","beautifulsoup4","jieba","matplotlib","wordcloud","pandas","pillow"])
    import requests
    import pandas as pd
    from bs4 import BeautifulSoup
    import jieba
    import jieba.analyse
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud,STOPWORDS
    import numpy as np    
    from PIL import Image 

以下为在没有安装依赖库的python环境下运行结果,即会自动进行依赖库下载安装~

指定依赖库自动下载安装

2.评论内容采集

Taptap玩家评价内容的采集比较简单,其评论页有非常明确的变化规则,主要由应用id、评论排序类型和页码三部分组成。

“https://www.taptap.com/app/130630/review?order=default&page=1#review-list ”

其中130630是应用id,这里是手游 天涯明月刀;default是评论排序类型,比如最新、最热等;1是页码,即当前选定的排序类型下的评论内容页码(每页20条评价)。

我们直接通过requests库的get方法请求网页数据,然后用bs4进行数据解析找到我们需要的评论文本内容即可。此前介绍过类似方法,这里不详细介绍代码逻辑,大家可以直接看下面代码:

代码语言:javascript复制
def tapReview(appid,num,order):
    '''
    Parameters
    ----------
    appid : int
        你需要查询应用的数字id.
    num : int
        你需要爬取的评论页数.
    num : str
        你需要爬取的评论列表类型
        默认:default
        最新:update
        最热:hot
        游戏时长:spent.
    Returns
    -------
    contents : list
        评论内容列表.
    '''
    print('开始爬取数据...')
    contents = []    
    n = 0
    for i in range(1,num 1):
     # 评价内容页(每页20条评价,不采集评价下面的回复内容)
        url = f'https://www.taptap.com/app/{appid}/review?order={order}&page={i}#review-list'
    
        html = requests.get(url)
        text = html.text
        
        soup = BeautifulSoup(text,'html.parser') 
        text_body = soup.find_all(class_="taptap-review-item collapse in")
    
        for j in range(len(text_body)):
            text_html = text_body[j]
            content = text_html.find(class_="item-text-body").text.strip()
            n =n  1
            contents.append(content)
            print(f'r已爬取{n}条评价内容',end=' ')
            
    return contents

以下是采集的评价内容部分截取

天刀部分评价内容

3.热词词云制作

词云制作需要对关键词进行频次计算,对于采集的评论,我们使用jieba做基础分词即可;如果需要去掉部分词,如“我们,觉得”等这种,我们可以添加停用词stopwords;如果我们需要添加自定义词,如“氪金,国服,手机游戏”等,可以使用jieba.add_word方法。对于生成的词云图,部分参数介绍如下:

“mask:词云图背景图(词云图的表现可以依赖背景图) background_color:词云图背景色调 font_path:词云文本字体 max_words:词云显示的最大词数 ”

代码语言: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"C:UsersgongdcDesktopsgyx.png"))
    # mask=bg
    wc = WordCloud(width=1080, height=960, background_color='black', font_path='FZZJ-YGYTKJW.TTF', stopwords=stopwords, max_font_size=400, random_state=50)
    wc.generate_from_text(words)
     
    plt.figure(figsize=(15, 12))
    plt.imshow(wc)
    plt.axis('off')
    # plt.savefig(r'F:词云9月3日评价词云.png')
    plt.show()
    
    print('词云已生成~')

4.程序跑起来

由于对不同的游戏来说,我们在讨论的时候可能会有一些特殊的词汇,但是也不会特别多,因此我把它放在了外面,以列表的形式咱们自由添加~ 另外,停用词的话,找到了一份常用的存为txt文档供本地调用~

“常见中文停用词: https://github.com/goto456/stopwords ”

代码语言:javascript复制
if __name__ == "__main__":
    # 采集游戏评论
    data = tapReview(130630,10,'update')

    # 自定义词典
    addWords = ['捏脸','手机版',"手游"]
    # 添加停用词(读取本地停词文件)
    stoptxt = pd.read_table(r'C:UsersGdcDesktopstop.txt',encoding='utf-8',header=None)
    stoptxt.drop_duplicates(inplace=True)
    stopWords = stoptxt[0].to_list()
    # 运行~
    ciYun(data,addWords,stopWords)

0 人点赞