预定热榜!!!用python分析taptap游戏评价,生成词云,源码赠送
今天在看taptap 的有什么新游戏的时候,突发奇想看看排行榜上的游戏玩家都在评论什么,所以选择一款游戏进行分析,我选择《原神》这款现在在比较火的游戏,废话不多说,我们开始吧。
TapTap 是一个推荐高品质手游的手游分享社区,实时同步全球各大应用市场游戏排行榜,与全球玩家共同交流并发掘高品质手游。每一款推荐游戏,都是由专业的测评团队从全球海量的游戏中精选而出,只为你提供好玩的手机游戏。
1、需求分析:
需要对目标网站进行评论的爬取,然后需要对其中的词进行分析,画出一个词云,需求很简单,一句话结束,这就是项目经理,哈哈,程序员忙活半天。
程序分析:
找到目标游戏api主页
爬取评论
对评论进行分词
去除一些没有意义的词,比如 我,的 这种停用词
绘制词云
输出图片
2、技术分析
2.1 爬取数据
目标网站:https://www.taptap.com/top/cloud-game
打开详情页,https://www.taptap.com/app/168332/review
可以看到下面的评论,说啥的都有,唉,做游戏真难。
常规操作,打开F12 ,然后一直往下拖动,可以看到评论是动态加载的,既然是动态加载的我们看下到底怎么请求的?
分析下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
- 点赞
- 收藏
- 关注作者
评论(0)