【Python】爬取TapTap原神评论并生成词云分析

selenium爬取TapTap评论 上一篇写的beautifulsoup和request爬取出的结果有误。首先,TapTap网页以JS格式解析,且评论并没有“下一页”,而是每次加载到底部就要进行等待重新加载。我们需要做的,是模仿浏览器的行为,所以这里我们用Selenium的方式爬取。 阅读详情

序言

本来是想爬B站的,但是B站游戏区的评论好像是动态方式加载,分析了一通没搞懂怎么爬,所以转到了TapTap,TapTap评论页通过URL来定位,非常容易拼接URL去获取想要的页面,所以这次爬取的对象选为TapTap。

目标

爬取TapTap社区原神游戏下玩家的评论,生成词频,词云,可视化关键词。

步骤

爬虫

目标是爬取用户名、评分、时间、评论四个维度的信息,首先要获取到页面上的评论列表:

response = requests.get(self.comments_url % page, headers=self.headers)
print('访问第', page, '页,状态是', response.status_code, '。')
time.sleep(random.random())
html = etree.HTML(response.text)
contents = html.xpath('//ul[contains(@class, "taptap-review-list")]/li')

然后遍历列表解析出各个字段:

user = content.xpath('.//a[@class="taptap-user-name"]/text()')[0] or '无名氏'
score = content.xpath('.//div[@class="item-text-score"]/i[@class="colored"]/@style')[0][7:9]
score = int(score) / 14
comment_time = content.xpath('(.//span)[4]/text()')[0]
comment = content.xpath('(.//div[@class="item-text-body"])[1]/p/text()')
comment = '\n'.join(comment)

最后把数据存入文件供之后使用:

comment_dir = {'user': users, 'score': scores, 'time': times, 'comment': comments}
comment_df = pd.DataFrame(comment_dir)
comment_df.to_csv('./tables/taptap_comments.csv')
comment_df['comment'].to_csv('./tables/comments.csv', index=False)
分词

爬虫拿到了数据,接下来就要对数据进行分词,这里使用的是jieba库:

jieba.load_userdict('./dictionary/my_dict.txt')
with open('./tables/comments.csv', 'r', encoding='utf-8') as f:
    word_list = jieba.cut(f.read())
with open('./dictionary/ignore_dict.txt', 'r', encoding='utf-8') as f:
    ignore_words = f.read().splitlines()

其中加载用户词典声明一些jieba中没有的词,再用忽略词典过滤掉一些无意义的词:

for word in word_list:
    if word not in ignore_words:
        word = re.sub(r'[\n ]', '', word)
        if len(word) < 1:
            continue
        words.append(word)

之后对分词后的数据进行词频分析:

frq = {}
for word in words:
    frq[word] = frq.get(word, 0) + 1
items = list(frq.items())
items.sort(key=lambda x:x[1], reverse=True)
print('词频前10统计如下:')
for i in range(10):
    word, count = items[i]
    print(word, ':', count)
词云

最后调用WordCloud库生成词云即可:

wordle = word_cloud.generate(wordle_data)
image = wordle.to_image()
image.show()

结果

词云:
在这里插入图片描述
词频:

词频前10统计如下:
钟离 : 337
角色 : 205
氪 : 187
玩家 : 182
好 : 135
人 : 131
原神 : 130
真的 : 126
让 : 123
这个 : 118

词频统计这里,忽略词典还不完善,还有无意义的词没过滤掉,不想写了,就这样吧。词云用了晴宝的蒙版,刻晴,永远的lp!(虽然我还没抽到)
在这里插入图片描述
(免疫)

源码

主文件genshin_wordle.py:

import requests
import time
import random
import jieba
import re
import pandas as pd
import numpy as np
from lxml import etree
from PIL import Image
from wordcloud import WordCloud


class genshin():
    def __init__(self):
        self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'}
        self.comments_url = 'https://www.taptap.com/app/168332/review?order=default&page=%d#review-list'

    def crawl_comments(self):
        users = []
        scores = []
        times = []
        comments = []
        # 爬取10页评论
        for page in range(10):
            response = requests.get(self.comments_url % page, headers=self.headers)
            print('访问第', page, '页,状态是', response.status_code, '。')
            time.sleep(random.random())
            html = etree.HTML(response.text)
            contents = html.xpath('//ul[contains(@class, "taptap-review-list")]/li')
            # 遍历该页的评论信息
            for content in contents:
                # 解析各个字段
                user = content.xpath('.//a[@class="taptap-user-name"]/text()')[0] or '无名氏'
                score = content.xpath('.//div[@class="item-text-score"]/i[@class="colored"]/@style')[0][7:9]
                score = int(score) / 14
                comment_time = content.xpath('(.//span)[4]/text()')[0]
                comment = content.xpath('(.//div[@class="item-text-body"])[1]/p/text()')
                comment = '\n'.join(comment)
                # 把一条完整记录存入数组
                users.append(user)
                scores.append(score)
                times.append(comment_time)
                comments.append(comment)
        # 封装数据,写入文件
        comment_dir = {'user': users, 'score': scores, 'time': times, 'comment': comments}
        comment_df = pd.DataFrame(comment_dir)
        comment_df.to_csv('./tables/taptap_comments.csv')
        comment_df['comment'].to_csv('./tables/comments.csv', index=False)
        print(comment_df)

    def word_frequency(self, words):
        frq = {}
        for word in words:
            frq[word] = frq.get(word, 0) + 1
        items = list(frq.items())
        items.sort(key=lambda x:x[1], reverse=True)
        print('词频前10统计如下:')
        for i in range(10):
            word, count = items[i]
            print(word, ':', count)

    def segmentation(self):
        # 加载自定义词典和忽略词典,进行分词
        jieba.load_userdict('./dictionary/my_dict.txt')
        with open('./tables/comments.csv', 'r', encoding='utf-8') as f:
            word_list = jieba.cut(f.read())
        with open('./dictionary/ignore_dict.txt', 'r', encoding='utf-8') as f:
            ignore_words = f.read().splitlines()
        words = []
        # 遍历分词
        for word in word_list:
            if word not in ignore_words:
                word = re.sub(r'[\n ]', '', word)
                if len(word) < 1:
                    continue
                words.append(word)
        global wordle_data
        wordle_data = ','.join(words)
        print(wordle_data)
        self.word_frequency(words)

    def generate_wordle(self):
        # 配置词云参数
        wordle_mask = np.array(Image.open('./images/keqing.jpg'))
        word_cloud = WordCloud(
            font_path='./fonts/simhei.ttf',
            background_color="white",
            mask=wordle_mask,
            max_words=300,
            min_font_size=5,
            max_font_size=100,
            width=500,
            height=350,
        )
        global wordle_data
        wordle = word_cloud.generate(wordle_data)
        image = wordle.to_image()
        image.show()
        wordle.to_file('./images/genshin_wordle.png')


genshin = genshin()
genshin.crawl_comments()
genshin.segmentation()
genshin.generate_wordle()

自定义词典my_dict.txt:

璃月
迪卢克
刻晴
阿贝多
米哈游

忽略词典ignore_dict.txt:

,
的
。
了
我
是
就
游戏
也

不
?
都
你
"
玩
说
一个
这
在
给
和
还
有
没有
没
就是
但是
吧
到
什么
现在
个
能
!
—
他
很
对b站弹幕进行数据分析 在4.0版本开始之前,原神的热度一直都处于比较低迷的状态,但是在原神序曲PV致终幕的欢宴发布后就获得了1千多万的播放量,所以很好奇玩家对这次的新版本有什么看法,有什么期待,都在说一些什么,所以使用python 对这次的视频进行了数据分析。总的来说,这次的新pv使得玩家对游戏的热情又得到了提升,大部分的玩家情绪值都是很高的,并且也可以看出现人气比较高的是水神,仆人。对收集到的数据进行存储,在存储过程中,我们需要把一些',','我'这些词进行筛选,这些词语对我们的分析并没有什么用。接下来对出现的词,进行计数。 阅读详情

相关推荐

B站评论爬虫--爬取游戏主页评论

由于公司需要监控到不同时间段用户观点的变化,需要爬取各个平台下我们用户的评论,因此,B站评论爬取的需求诞生啦!!~~看了网上的其他教程,都没有我这个类型的(大多数是普通的up上传的视频),我这个呢,是官方游戏主页(也许可以这么叫吧,我也不知道,反正就是从地址上看就不大一样,是http://www.biligame.com开头的) 那么这种特别一点的评论要怎么爬取呢?接下来我们一起来解决吧~ 查找评...

数据小红的博客 2636

Python爬虫 | 爬虫基础入门看这一篇就够了

大家好,今天我们来聊聊Python爬虫的基础操作,反正我是这样入门了,哈哈。其实,一开始学python的时候,我是冲着数据处理分析去了,那个pandas什么的。后来,发现爬虫挺好玩,可以解决纯手工采集网上数据的繁琐问题,比如我用的比较多的爬取taptap某游戏评价内容、某视频网站某剧的弹幕、某评的店铺信息、某牙主播信息等等。关于爬虫,我也只会一些比较基础的操作,不过个人经验上感觉这些基础基本可以满足比较常规化的需求。对于进阶的爬虫技巧,大家在了解熟悉爬虫基础后自然会有进阶学习的思路与途径。

m0_59236127的博客 838

用Python进行游戏舆论分析,生成词云,源码赠送

使用python对游戏的评价进行分析,并生成词云

我是香菜 1827

Python爬虫,爬虫基础入门看这一篇就够了

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)

m0_59235245的博客 588

【Python学习】网络爬虫-爬取豆瓣电影评论

【Python学习】网络爬虫-爬取豆瓣电影评论:本实例实现了庆余年的豆瓣电影评论爬取,使用了requests、bs4模块。requests:是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。requests 模块比urllib模块更简洁。bs4:全名,是编写 python 爬虫常用库之一,主要用来解析 html 标签。

u014481728的博客 1万+

Python爬虫获取网上评论

演示了如何利用Python库获取网上关于汽车的评估的方法。乃至了urllib库、BeautifulSoup库等。

Python文本分析实战:《跨越星弧》TapTap玩家评论内容词云分析

许久之前写了一篇《Python网络爬虫实战》的博客,里面讲了爬虫的过程,但是没有讲如何分析。这次讲述一下用如何通过词云分析,来从这些文本数据里面获得结论 首先,回顾一下分析背景 主要是看了一下随着日期,玩家每天的评论变化,其中红色柱状是总的评论数 这里我们发现几个非常有趣的点, (1)4.13前后出现了评分陡降的情况 (2)4月底评分持续低迷 这段时间肯定是发生了什么事情,所以才出现掉分的情况...

狸克先生的笔记本 1613

python分析taptap游戏评价,生成词云

python分析taptap游戏评价,生成词云

taptap评论爬虫

taptap评论爬虫情感分析 1、下载fidder 1.1、官方下载 官网下载链接: fidder. 1.2、fidder使用 使用fidder获取url: b站视频. 1.3、获取并复制保存url 2、评论爬虫和保存 2.1、爬虫的代码 import requests import os import re import random impor...

weixin_48001478的博客 2393

TAPTAP游戏评论的文本挖掘(完整源码项目说明)(包括APP爬虫、数据清洗、pyecharts可视化、情感分析).zip

1、该资源内项目代码经过严格调试,下载即用确保可以运行! 2、该资源适合计算机相关专业(如计科、人工智能、大数据、数学、电子信息等)正在做课程设计、期末大作业和毕设项目的学生、或者相关技术学习者作为学习资料参考使用。 3、该资源包括全部源码,需要具备一定基础才能看懂并调试代码。 TAPTAP游戏评论的文本挖掘(完整源码项目说明)(包括APP爬虫、数据清洗、pyecharts可视化、pytorch框架下LSTM模型情感分析).zipTAPTAP游戏评论的文本挖掘(完整源码项目说明)(包括APP爬虫、数据清洗、pyecharts可视化、pytorch框架下LSTM模型情感分析).zipTAPTAP游戏评论的文本挖掘(完整源码项目说明)(包括APP爬虫、数据清洗、pyecharts可视化、pytorch框架下LSTM模型情感分析).zipTAPTAP游戏评论的文本挖掘(完整源码项目说明)(包括APP爬虫、数据清洗、pyecharts可视化、pytorch框架下LSTM模型情感分析).zip

【机器学习(一)】从零到一:用sklearn构建你的第一个机器学习项目

本文为机器学习新手提供了一个完整的端到端实战指南。通过使用Python的scikit-learn库,以经典的鸢尾花数据集为例,详细演示了从环境搭建、数据探索、预处理、模型训练与评估,到超参数调优和模型保存的全流程。文章旨在帮助读者快速构建第一个机器学习项目,掌握核心工作流和工程实践。

weixin_29070861的博客 467

三分钟实现0代码爬虫-影刀RPA+攻克DATA爬取懂车帝论坛发帖

攻克DATA下载地址:https://www.yuque.com/gk.ai/gkdata/zn5r4grngkk2lidp。第二步:用攻克DATA配置解析数据规则和数据存放路径;攻克DATA是一款强大的网络日志解析工具。推荐:GKA496F78CB479347D4F5B3E05892795A5。简单几步一个全自动的爬虫程序就完成啦,全程0代码实现。影刀RPA+攻克DATA0代码数据爬取-懂车帝论坛发帖。

Dabaobaopang的博客 3751

CMOS图像传感器系列--(四)HDR之LOFIC技术

CMOS图像传感器HDR技术之LOFIC解析 LOFIC(横向溢出积分电容器)技术是当前高动态范围成像的重要方案,通过在像素光电二极管旁设置高密度电容器收集溢出电荷,有效保留高光细节。该技术采用特殊像素结构,通过skim level触发电荷转移,实现单帧HDR成像。然而LOFIC存在显著局限性:高光区域噪声明显且难以消除,动态范围拓展不均衡(主要优化亮部),需复杂MIM工艺导致成本升高。为应对挑战,行业提出混合方案(如结合DCG技术)和工艺改进方向。OmniVision最新车载传感器OX08D10就采用了L

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 5793

再也不用手动复制粘贴收集Taptap游戏评论了,还可以制作好看的热词词云图~

文章目录1.引入需要的库2.评论内容采集3.热词词云制作4.程序跑起来 预览 1.引入需要的库 由于我们这里需要采集评论内容,同时对这些评论数据进行分词与热词词云制作,因此需要引入的第三方库较多。考虑到使用者环境的差异性,这里采用**pip.main()**方法,若加载时发现依赖库不存在则自动安装,哇,好方便啊~ # 如果需要引用的库未安装,则自动安装 try: import requests import pandas as pd from bs4 import Beautif

可以叫我才哥 2189

富斯遥控器-ros机器人控制

富斯遥控器-ros机器人手柄控制

zkh7758的博客 1699

离散数学期末考试试卷(两套)-熟悉题型

3.设集合A={a,b,c,d}上有自反关系R={,,,,},对称关系S={,,,}。6.设集合A={1,2,3},B={u,v,w},C={a,b,c},f是集合A到集合B上的映射,g是集合B到集合C上的映射,f={, , },g={},则复合函数g。5. 设集合A={a,b,c,d,e},下列选项中哪一个集合不是A的划分( )。

muse3159546973的博客 6956

BeautifulSoup库TapTap评论爬虫

最近在写关于评论数据主题建模和情感分析的作业,本来想用八爪鱼直接爬TapTap的评论数据,但是自动识别网页总是定位错误,还是回归BeautifulSoup和Request来进行评论内容的爬取,具体操作步骤如下。

mynameispy的博客 2259

VS Code 配置 LaTeX 写作环境完全指南

本文详细介绍了如何在 VS Code 中配置 LaTeX 写作环境,涵盖了从安装必备组件到高级功能的全面指南。首先,用户需要安装 LaTeX 发行版(如 TeX Live 或 MiKTeX)和 VS Code 插件(如 LaTeX Workshop)。接着,通过修改 settings.json 和 keybindings.json 文件,用户可以自定义编译、查看快捷键等基础配置。文章还提供了高效写作技巧,如使用代码片段和多文件项目管理,并介绍了高级功能如反向同步、公式预览和参考文献管理。此外,针对常见问题(

weixin_70043030的博客 1984

Python网络爬虫实战:《跨越星弧》TapTap玩家评论的抓取及分析

先说说背景吧: 之前玩了一段时间的《跨越星弧》,后来太忙了就没玩了,最近突然想起来想看看,发现TapTap评分居然掉到7.7分了 其实我觉得这个产品挺好的,玩法、剧情、美术都有可圈可点之处。但是为什么突然就从8.5分+掉到7.7了呢 于是我就去翻了翻评论,翻了10+页,好像也没看出什么问题。也没兴致往下看了,因为评论真的太多了,这样人工一条条的看,根本看不出个所以然来 刚好最近在看游戏数据分析,于...

狸克先生的笔记本 4967

自然语言处理:长文本场景下的关键词抽取实践

自然语言处理:长文本场景下的关键词抽取实践

丨汀、的博客 2076

笔试题-2023-加特兰-数字IC设计【纯净题目版】

笔试题-2023-加特兰-数字IC设计【纯净题目版】

w0shishabi的博客 2248

python爬各平台评论并数据分析——数据采集、评论情绪分析、新闻热度

新闻热点、各平台评论、点赞等等、情绪分析

Strive_LiJiaLe的博客 2万+

[数学建模][2012年A国赛模拟] 3. 葡萄酒的评价

暑期学校数学建模培训第三次模拟:2012年国赛A题,一道完全统计方面的题目。据老师反映当年有位老师所带领小组取得“全国10佳优秀论文奖”,我们大组搞统计的老师建模能力不行,但其统计理论非常扎实,在此期间给予我们非常大的帮助,十分感谢老师的倾囊相授。我们小组的定位也不在统计方向,主攻物理建模及优化模型,故本次模拟就用SPSS软件简单做了下,还是学到了多元统计的许多知识,达到了本次训练的目的。 ...

Y-puyu 的博客 3万+

爬虫爬取某游戏评论

本次的目标网站为: https://www.taptap.com/app/192976/review 首先进去网站可以看到如下界面 进去网站后找到所有评论所在位置你然后点击,点击"F12"以后点击" Netword "以后刷新可以得到如下界面 如上图,不断的将评论往下拉可以看到右边会新加一些请求,就会发现该网站为动态网站,点开这些请求以后,会发现我们所与需要的数据就在 这里: 观察这些网址的参数 下面为第一个网址的参数 app_id: 192976 limit: 10 mainRequest: tr

lxlx123abc的博客 2512

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

20200527-taptap评论爬取

import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent def url_get(url,head): res = requests.get(url, headers=head) print(res.status_code) html = res.text return html def html_get(html): soup = BeautifulS

sinat_21748377的博客 1600

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

大家好,我是香菜 今天在看taptap 的有什么新游戏的时候,突发奇想看看排行榜上的游戏玩家都在评论什么,所以选择一款游戏进行分析,我选择《原神》这款现在在比较火的游戏,废话不多说,我们开始吧。 TapTap 是一个推荐高品质手游的手游分享社区,实时同步全球各大应用市场游戏排行榜,与全球玩家共同交流并发掘高品质手游。每一款推荐游戏,都是由专业的测评团队从全球海量的游戏中精选而出,只为你提供好玩的手机游戏。 1、需求分析: 需要对目标网站进行评论的爬取,然后需要对其中的词进行分析,画出一个词云,需求很简

clockticks的博客 569

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 【Python】遗传算法求解二元函数最值
下一篇: 【Python】视频转彩色字符动画
includei
博客等级 码龄9年 406粉丝 71原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值