05
目录:
- 1.引入需要的库
- 2.评论内容采集
- 3.热词词云制作
- 4.程序跑起来
预览
同学们,猜猜以下6款游戏分别是TapTap上面的哪6款产品呢??欢迎在留言区留言哦~ 【我们会在接下来教大家怎么一键生成大家喜爱的游戏产品评论热词词云】
1.引入需要的库
由于我们这里需要采集评论内容,同时对这些评论数据进行分词与热词词云制作,因此需要引入的第三方库较多。考虑到使用者环境的差异性,这里采用pip.main方法,若加载时发现依赖库不存在则自动安装,哇,好方便啊~
代码语言:javascript复制# 如果需要引用的库未安装,则自动安装
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进行数据解析找到我们需要的评论文本内容即可。此前介绍过类似方法,这里不详细介绍代码逻辑,大家可以直接看下面代码:
代码语言:javascript复制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方法。对于生成的词云图,部分参数介绍如下:
代码语言:javascript复制“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:UsersgongdcDesktopsgyx.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文档供本地调用~
代码语言:javascript复制“常见中文停用词: https://github.com/goto456/stopwords ”
if __name__ == "__main__":
# 采集游戏评论
data = tapReview(130630,10,'update')
# 自定义词典
addWords = ['捏脸','手机版',"手游"]
# 添加停用词(读取本地停词文件)
stoptxt = pd.read_table(r'C:UsersGdcDesktopstop.txt',encoding='utf-8',header=None)
stoptxt.drop_duplicates(inplace=True)
stopWords = stoptxt[0].to_list()
# 运行~
ciYun(data,addWords,stopWords)