用Python进行游戏舆论分析,生成词云,源码赠送,文末 评论送书包邮!!!

大家好,我是香菜

今天在看taptap 的有什么新游戏的时候,突发奇想看看排行榜上的游戏玩家都在评论什么,所以选择一款游戏进行分析,我选择《原神》这款现在在比较火的游戏,废话不多说,我们开始吧。

TapTap 是一个推荐高品质手游的手游分享社区,实时同步全球各大应用市场游戏排行榜,与全球玩家共同交流并发掘高品质手游。每一款推荐游戏,都是由专业的测评团队从全球海量的游戏中精选而出,只为你提供好玩的手机游戏。

1、需求分析:
需要对目标网站进行评论的爬取,然后需要对其中的词进行分析,画出一个词云,需求很简单,一句话结束,这就是项目经理,哈哈,程序员忙活半天。

程序分析:

找到目标游戏api主页

爬取评论

对评论进行分词

去除一些没有意义的词,比如 我,的 这种停用词

绘制词云

输出图片

2、技术分析
2.1 爬取数据
目标网站:https://www.taptap.com/top/cloud-game

打开详情页,https://www.taptap.com/app/168332/review

可以看到下面的评论,说啥的都有,唉,做游戏真难。

常规操作,打开F12 ,然后一直往下拖动,可以看到评论是动态加载的,既然是动态加载的我们看下到底怎么请求的?

https://www.taptap.com/webapiv2/review/v2/by-app?app_id=168332&from=20&limit=10&X-UA=V%3D1%26PN%3DWebApp%26LANG%3Dzh_CN%26VN_CODE%3D41%26VN%3D0.1.0%26LOC%3DCN%26PLT%3DPC%26DS%3DAndroid%26UID%3D59e7bddc-565f-4774-a945-0cbcc13c1ad3%26DT%3DPC
分析下url

from=20&limit=10 :盲猜是从第20个开始,请求10个评论,多次拖动后验证了猜想,优秀

X-UA:X:在计算机中一般表示 extend,扩展的意思 UA:User Agent,有啥用我也不知道,直接拷出来就行了

我们试试修改from 和to 参数直接请求看看结果:

完美,看起来可以直接请求数据,因此我们可以直接修改参数,一直请求就可以了

2.2 词云的创建
词云的创建没什么难度,只是需要面对的是对评论数据的处理,然后调用wordCloud 就可以了,为了能有人更多的读取这篇文章,我给自己加了个难度,对一个美女图片进行了扣取,然后显示成美女的形状,看下原图

就问你稀不稀罕?

3、show you code
3.1 环境的安装
我的环境 :

python:python3.8

OS : win7

IDE :pycharm

拷贝下面几个命令到控制台,安装必要的包,注:一次使用一条哦

pip install matplotlib
pip install jieba
pip install wordcloud
3.2 爬取评论的代码
#!/usr/bin/env python
# encoding: utf-8
 
 
"""
#Author: 香菜
@time: 2021/9/2 0002 下午 9:07
"""
import requests
 
def get_content(url):
   try:
       user_agent = 'Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0'
       response = requests.get(url, headers={'User-Agent': user_agent})
       response.raise_for_status()  # 如果返回的状态码不是200, 则抛出异常;
       response.encoding = response.apparent_encoding  # 判断网页的编码格式, 便于respons.text知道如何解码;
   except Exception as e:
       print("爬取错误")
   else:
       print(response.url)
       print("爬取成功!")
       return response.json()
if __name__ == '__main__':
   # baseUrl = "https://www.taptap.com/app/168332/review"
   # https://www.taptap.com/webapiv2/review/v2/by-app?app_id=168332&from=30&limit=10&X-UA=V%3D1%26PN%3DWebApp%26LANG%3Dzh_CN%26VN_CODE%3D41%26VN%3D0.1.0%26LOC%3DCN%26PLT%3DPC%26DS%3DAndroid%26UID%3D929182cb-bba8-4a5d-aee8-3aaacb24dcc7%26DT%3DPC
   fromWhere = 0
   fileName = 'comments.txt'
   while fromWhere != -1:
       url = 'https://www.taptap.com/webapiv2/review/v2/by-app?app_id=168332&from='+str(fromWhere)+'&limit=10&X-UA=V%3D1%26PN%3DWebApp%26LANG%3Dzh_CN%26VN_CODE%3D41%26VN%3D0.1.0%26LOC%3DCN%26PLT%3DPC%26DS%3DAndroid%26UID%3D929182cb-bba8-4a5d-aee8-3aaacb24dcc7%26DT%3DPC'
       jsonData = get_content(url)
       for item in jsonData['data']['list']:
           comment = item['moment']['extended_entities']['reviews']
           for c in comment:
               with open(fileName, 'a+', encoding='utf-8') as f:
                   f.write(c['contents']['text'])
 
       fromWhere += 10
 
       if fromWhere >50:
           fromWhere = -1
注:我将下载的评论写入到了文本文件comments.txt中,

我只爬取了50条的评论,没有爬取更多的内容,你可以修改参数进行爬取。

3.3 词云的制作
#!/usr/bin/env python
# encoding: utf-8
from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud, STOPWORDS
 
"""
#Author: 香菜
@time: 2021/9/2 0002 下午 8:36
"""
# # 安装:pip install matplotlib
# # 安装:pip install jieba
# # 安装pip install wordcloud
if __name__ == '__main__':
   # 1、下载数据
   # 2、整理数据
   # 3、画词云
   # !/usr/bin/Python
   # -*- coding: utf-8 -*-
   ###当前文件路径
   d = path.dirname(__file__)
 
   # 读取文本
   file = open(path.join(d, 'comments.txt'),encoding='utf-8').read()
   ##进行分词
   default_mode = jieba.cut(file)
   text = " ".join(default_mode)
   alice_mask = np.array(Image.open(path.join(d, "0.jpeg")))
   # stop = open('baidu_stop.txt', 'r+', encoding='utf-8')
   # 用‘\n’去分隔读取,返回一个一维数组
   stopword = set(map(str.strip, open('baidu_stop.txt',encoding='utf-8').readlines()))
   stopwords = set(stopword)
   wc = WordCloud(
       # 设置字体,不指定就会出现乱码,这个字体文件需要下载
       font_path=r'c:\windows\fonts\simsun.ttc',
       background_color="white",
       max_words=2000,
       mask=alice_mask,
       stopwords=stopwords)
   # 生成词云
   wc.generate(text)
 
   # 放到图片中
   wc.to_file(path.join(d, "香菜.jpg"))
 
   # show
   plt.imshow(wc, interpolation='bilinear')
   plt.axis("off")
   plt.figure()
   plt.imshow(alice_mask, cmap=plt.cm.gray, interpolation='bilinear')
   plt.axis("off")
   plt.show()
   pass
3.4 处理结果
爬取的数据

生成的图片,注:右边是生成的词云,左边是原图

4、遇到的问题
4.1 json 数据的读取
使用requests 请求回来数据后是json 数据,使用下面的方式接收jsons

response.json()
4.2 json 数据路径的查看
返回来的json数据结构曾经蛮复杂的,下面是我在调试时的json数据,可以看到一层套一层的,非常复杂,在开发的过程中如果不好知道路径,可以调试模式下,断点看下参数是什么样子,然后继续写。小技巧!

4.3 jieba 的使用
jieba分词我们之前就用过,可以看下上篇:震惊了,用Python这么简单实现了聊天系统的脏话,广告检测

在调试的过程中我发现一些无意义的词汇占了很大比例,比如我,我的等等这种词汇,明显不是我想要的,所以要去除这些词汇。专业里面来说叫停用词。

停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。这些停用词都是人工输入、非自动化生成的

我在代码中也提供了停用词,需要的可以下载。如果有些词停用词中没有,你可以手动添加。

4.4 图片的扣取
原图是这样的,我想要扣除后面的背景,只留下美女的轮廓,对于一个程序员来说,这真的挺难,最后还是自己瞎折腾了一下才搞定,这真的好难。

4.5 字体的绘制
在绘制的时候,如果不选择中文字体,可能会乱码,所以选择了simsun.ttc。

window中自带的字体都有下面这些,你可以自己切换,看下不同的效果

5、还有哪些优化点
这里我只是为了完成一个小的功能,将功能进行了分解,但是还是有一些优化点。

5.1 拉取子评论
可以把评论里面的子评论也进行拉取,作为数据进行导入,这样分析可能更全面

5.2 可以拉取游戏的评分
每个评论都对游戏进行了打分,可以分开对不同打分的评论进行处理,看下不同分数下各种评论的问题焦点,可以做出不同的优化

5.3 对爬取的直接分词
现在的操作是将爬取和绘制词云进行了分开处理,这样分两步了,多次操作词云都要重新分词和绘制。可以在爬取的时候直接分词,这样在绘制词云的时候可以避免重复的操作

5.4 不存入txt
可以将爬取的输入放入redis,这样操作速度更快。

总结:
这个还是花了不少时间写的代码,总结成文章也花了不少时间,不知道能不能说清楚,有问题的话可以留言

原创不易,求个点赞转发,支持一下。
————————————————
版权声明:本文为CSDN博主「香菜聊游戏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/perfect2011/article/details/120101112

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的问题,需要分几个步骤来回答。 1. 生成词云 首先,我们需要安装 `wordcloud` 和 `jieba` 这两个库。`wordcloud` 用于生成词云,`jieba` 用于中文分词。你可以使用以下命令来安装它们: ``` pip install wordcloud jieba ``` 接着,我们需要准备文本数据,并进行分词。假设我们有一个名为 `text.txt` 的文本文件,我们可以使用以下代码进行分词: ```python import jieba with open("text.txt", "r", encoding="utf-8") as f: text = f.read() words = jieba.cut(text) text = " ".join(words) ``` 接着,我们可以使用 `wordcloud` 生成词云。以下是一个简单的例子: ```python from wordcloud import WordCloud wc = WordCloud(width=800, height=400, background_color="white", max_words=100, font_path="simsun.ttf") wc.generate(text) wc.to_file("wordcloud.png") ``` 在这个例子中,我们指定了词云的宽度、高度、背景色、最大词汇量和字体文件路径。然后,我们使用 `generate` 方法生成词云,并使用 `to_file` 方法保存词云图片。 2. 分析词云内容 生成词云之后,我们可以使用一些工具来分析词云内容。以下是一些常用的工具: - 词频统计。可以使用 Python 的 `collections` 模块中的 `Counter` 类来统计词频。 ```python from collections import Counter counter = Counter(words) print(counter.most_common(10)) ``` 这个例子中,我们统计了 `words` 中出现次数最多的 10 个词汇。 - 情感分析。可以使用一些第三方库(如 `SnowNLP`)来对文本进行情感分析。 ```python from snownlp import SnowNLP s = SnowNLP(text) print(s.sentiments) ``` 这个例子中,我们使用 `SnowNLP` 对文本进行情感分析,并输出情感值(越接近 1 表示越正面,越接近 0 表示越负面)。 - 主题分析。可以使用一些第三方库(如 `gensim`)来对文本进行主题分析。 ```python import gensim from gensim import corpora dictionary = corpora.Dictionary([words]) corpus = [dictionary.doc2bow(words)] lda_model = gensim.models.LdaModel(corpus, num_topics=5, id2word=dictionary) print(lda_model.print_topics()) ``` 这个例子中,我们使用 `gensim` 对文本进行主题分析,并输出主题模型中的主题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值