预定热榜!!!用python分析taptap游戏评价,生成词云,源码赠送,评论送书包邮

Posted 香菜聊游戏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了预定热榜!!!用python分析taptap游戏评价,生成词云,源码赠送,评论送书包邮相关的知识,希望对你有一定的参考价值。

目录

 

1、需求分析:

2、技术分析

2.1 爬取数据

2.2 词云的创建

3、show you code

3.1 环境的安装

3.2 爬取评论的代码

3.3 词云的制作

3.4 处理结果

4、遇到的问题

4.1 json 数据的读取

4.2 json 数据路径的查看

4.3 jieba 的使用

4.4 图片的扣取

4.5 字体的绘制

5、还有哪些优化点

5.1 拉取子评论

5.2 可以拉取游戏的评分

5.3 对爬取的直接分词

5.4 不存入txt

总结:


大家好,我是香菜

今天在看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,这样操作速度更快。

总结:

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

原创不易,求个点赞转发,支持一下。

完整资源下载地址:https://download.csdn.net/download/perfect2011/21930270

送书第二期

《数据结构和算法基础Python语言实现》

1.新颖:模块化的编程,程序分步运行与讲解。

2. 直观:300多幅图表,辅助分析,一看就懂。

3. 易用:例程代码可在浏览器中直接运行,代码注释详尽,拿来就用。

4. 实用:30多种算法,60多个实例,覆盖面广。

京东自营购买链接:

https://item.jd.com/13026026.html

当当自营购买链接:

http://product.dangdang.com/29156431.html

大家点赞关注,三天后在留言的同学中抽取送一本书

注:如果中奖了没关注则放弃

以上是关于预定热榜!!!用python分析taptap游戏评价,生成词云,源码赠送,评论送书包邮的主要内容,如果未能解决你的问题,请参考以下文章

go语言爬虫 - TapTap用户都喜欢些什么游戏

instagram怎么爬梯子

如何用雷电模拟器玩taptap

海外首款云原生游戏大火;TapTap上线云游功能丨云游戏月报

taptap没有tapplay的版本

扫什么,评什么