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


预览
6款游戏评价词云

1.引入需要的库

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

# 如果需要引用的库未安装,则自动安装 
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进行数据解析找到我们需要的评论文本内容即可。
此前介绍过类似方法,这里不详细介绍代码逻辑,大家可以直接看下面代码:

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:词云显示的最大词数

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:\Users\gongdc\Desktop\sgyx.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

if __name__ == "__main__":
    
    data = tapReview(130630,10,'update')

    # 自定义词典
    addWords = ['捏脸','手机版',"手游"]
    # 添加停用词(读取本地停词文件)
    stoptxt = pd.read_table(r'C:\Users\Gdc\Desktop\stop.txt',encoding='utf-8',header=None)
    stoptxt.drop_duplicates(inplace=True)
    stopWords = stoptxt[0].to_list()
    # 运行~
    ciYun(data,addWords,stopWords)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值