【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

深入解析MATLAB四旋翼仿真案例asbQuadcopter的核心模块与优化技巧

本文深入解析了MATLAB/Simulink中的四旋翼无人机官方案例asbQuadcopter,详细拆解了其指令、传感器、控制器、本体与环境等核心模块的工作原理。重点探讨了经典的PID双环控制结构、传感器噪声模拟、模型替换方法以及系统化的PID参数调优技巧,旨在帮助用户从“开箱即用”过渡到深度定制与优化,构建更精准的仿真模型。

weixin_29171087的博客 361

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

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

Dabaobaopang的博客 3751

基于matlab版本的三维直流电法反演算法

可以使用RESINVM3D工具包等现成的MATLAB工具进行三维直流电法反演。反演问题求解:基于MATLAB的反演问题求解算法实现和应用,包括反演问题数值模拟、反演问题参数优化和反演问题结果分析。希望这个代码示例能帮助你入门三维直流电法反演。如果有更具体的需求或问题,可以进一步探讨。反演过程中可能需要调整正则化参数和优化算法的设置。需要根据实际问题实现,可能涉及复杂的数值计算。

ytttr873的博客 668

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

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

可以叫我才哥 2189

用Multisim仿真AD630锁定放大器:从2012年电赛A题实战到避坑指南

本文详细介绍了如何使用Multisim仿真AD630锁定放大器,从2012年电赛A题实战出发,提供完整的电路搭建、参数优化及避坑指南。重点解析AD630的开关调制架构和双相位检测的工程实现,帮助读者在强噪声背景下有效提取微弱信号,提升电子设计竞赛和工程实践中的信号处理能力。

weixin_42549451的博客 203

图文详解秋叶ComfyUI整合包开启密码访问教程(附内网穿透实战经验) ComfyUI密码、ComfyUI-Login、ComfyUI内网穿透、秋叶整合包、ComfyUI安全防护

想远程访问 ComfyUI(跨设备或公网)不希望任何人随意使用或篡改服务需要给 ComfyUI 添加登录验证机制只要按照本文教程,安装插件,并设置好用户名密码,你就能把服务加上一道强力的门槛。📌配合ngrokfrp等内网穿透工具使用公网域名推荐启用 HTTPS(SSL证书可以用宝塔/ZeroSSL 申请)密码可以设置复杂一些,定期更换更安全📬如果你在配置过程中遇到问题,欢迎评论区留言交流,或者私信我,后续我也会更新更多 ComfyUI 插件教程、安全部署经验等内容。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2727

BeautifulSoup库TapTap评论爬虫

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

mynameispy的博客 2259

PCB仿真软件:Altium Designer_(6).PCB布线设计:自动布线与手工布线

通过以上步骤,我们完成了一个简单的PCB设计案例。在这个过程中,我们使用了自动布线和手工布线的综合策略,确保布线质量符合设计要求。创建PCB项目:在Altium Designer中创建一个新的PCB项目。导入原理图:将原理图文件导入到PCB项目中。设置布线规则:通过设置必要的布线规则,如线宽、间距等。启动自动布线:使用自动布线器进行初步布线。手工优化布线:通过手工布线工具优化关键信号的布线路径。保存和导出PCB文件:保存PCB文件并导出Gerber文件,用于生产。

kkchenjj的博客 2522

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

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

狸克先生的笔记本 4967

架构师成长之路(1)--什么是架构师

前言: 哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知。 如果我们要成为架构师,我们自己要面临的三大问题: 找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做? 这里面就是做事方法论:目标(我要做什么),方法(计划)(我该怎么做), 执行/行动找准自己定位:我是谁?在哪里...

黄规速博客:学如逆水行舟,不进则退 6万+

VMware16虚拟机:下载和安装教程

VMware16 虚拟机 下载和安装教程

MQ0522的博客 20万+

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

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

Strive_LiJiaLe的博客 2万+

智能驾驶辅助系统(ADAS)全解析:功能详解 + 技术原理 + 实战案例

智能驾驶辅助系统(ADAS)是现代汽车技术的重要组成部分,旨在提升驾驶安全性和便利性。本文详细解析了ADAS的多个功能模块,包括自适应巡航控制(ACC)、车道偏离预警/车道保持辅助(LDW/LKA)、前向碰撞预警/自动紧急制动(FCW/AEB)、盲区检测/变道辅助(BSD/BSM)、倒车影像、自动泊车辅助(APA)、交通标志识别(TSR)、自动远光控制(AHB)、后方交叉来车预警(RCTA)和驾驶员疲劳监测。每个功能模块都基于特定的技术原理,如毫米波雷达、摄像头、传感器融合和深度学习算法,以实现对车辆周围环

weixin_43199439的博客 2102

爬虫爬取某游戏评论

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

lxlx123abc的博客 2512

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

clockticks的博客 569

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值