目錄
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
大家點贊關注,三天后在留言的同學中抽取送一本書
注:如果中獎了沒關注則放棄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298449.html
標籤:其他
