【python爬虫开发实战 情感分析】利用爬虫爬取城市评论并对其进行情感分析

news2024/12/24 3:05:48

🚀个人主页:为梦而生~ 关注我一起学习吧!
💡专栏
python网络爬虫从基础到实战 带你学习爬虫从基础到实战
深度学习带你感受AI的魅力
💡往期推荐
⭐️前面比较重要的基础内容
【Python爬虫开发基础⑫】requests库概述(文件上传、cookies处理、状态码处理、异常处理等)
【Python爬虫开发基础⑬】Scrapy库概述(简介、安装与基本使用)
【Python爬虫开发基础⑭】Scrapy架构(组件介绍、架构组成和工作原理)
⭐️爬虫的实战文章
【Python爬虫开发实战①】使用urllib以及XPath爬取可爱小猫图片
【Python爬虫开发实战②】使用urllib以及jsonpath爬取即将上映电影信息
⭐️机器学习基础文章:
【机器学习基础】正则化
【机器学习基础】决策树(Decision Tree)
【机器学习基础】K-Means聚类算法


文章目录

  • 一、目的
  • 二、方法
    • (1)爬取小红书:
    • (2)爬取携程:
    • (3)数据处理:
    • (4)词云生成
    • (5)情感分析
  • 三、数据分析结果
  • 四、结论
  • 五、代码


一、目的

本项目旨在通过爬取大量的评论数据,分析游客对潍坊和淄博的情感态度,从而为有意向去这两个城市旅游的人提供有价值的参考。通过对评论的情感分析,我们可以解游客对潍坊和淄博的整体评价以及他们在评论中表达的情感倾向。同时,我们还可以获取对这两个城市的客观评价、满意度水平和不满意之处的细节解。这些信息可以帮助旅游从业者、景点管理者和相关决策者更好地了解游客对潍坊和淄博旅游体验的感受,进一步改善景点的服务质量和提升游客的满意度。此外,这些评论数据的情感分析还可以为市场营销活动、旅游推广和舆情管理等方面的决策提供有价值的参考。


二、方法

(1)爬取小红书:

使用requests库来发送HTTP请求,并使用json和re库来处理JSON数据和正则表达式。搜索小红书上的笔记,并根据给定的关键词、数量和排序方式获取相应的笔记信息。

  1. 导入所需的库:jsonrerequestsOneNote类(从xhs_utils.xhs_util模块导入)以及get_headersget_search_dataget_paramsjscheck_cookies函数(从one模块导入)。
  2. 定义一个名为Search的类,该类包含以下方法:
  • __init__:初始化方法,用于设置cookies、搜索URL、请求头和参数。如果传入cookies参数,则使用传入的cookies,否则调用check_cookies()函数获取cookies
  • get_search_note:根据给定的关键词和数量,获取搜索结果中的笔记ID列表。该方法首先构造一个包含搜索数据的JSON字符串,然后使用正则表达式替换其中的关键词和页码。接着,通过循环不断发送请求,直到获取到足够数量的笔记ID或没有更多搜索结果为止。最后返回笔记ID列表。
  • handle_note_info:根据给定的关键词、数量、排序方式和其他参数,处理搜索结果中的笔记信息。该方法首先构造一个包含搜索数据的JSON字符串,然后使用正则表达式替换其中的关键词和页码。接着,通过循环不断发送请求,直到获取到足够数量的笔记信息或没有更多搜索结果为止。最后打印出搜索结果的数量。
  • main:主方法,用于接收用户输入的信息(关键词、数量和排序方式),并调用handle_note_info方法处理搜索结果。
  1. 在程序的主入口点,创建一个Search类的实例,并设置搜索的关键词、数量和排序方式。然后调用main方法开始搜索。

(2)爬取携程:

  1. 导入所需的库和模块:程序首先导入各种需要的库和模块,包括操作系统、时间、配置文件解析、HTTP请求、CSV文件处理、日志记录、JSON数据处理和文件操作等。
  2. 定义变量和常量:程序定义一些变量和常量,用于存储API接口地址、标志位、数据集合等。
  3. 定义函数:程序定义几个函数,用于获取城市编号、计算票价平均值、获取景点的票价信息等。
  4. 主程序执行流程:在主程序中,首先初始化日志记录器,然后读取配置文件中的参数。接下来,程序进入一个循环,循环爬取城市编号、景点列表数据、景点详情数据和票价数据。根据需要,程序还会爬取评论数据。最后,将爬取到的数据保存到文件中。

(3)数据处理:

将指定文件夹下的所有CSV文件合并成一个文件。主要运行流程如下:

  1. 导入pandas库和glob库。定义一个名为hebing的函数,用于合并CSV文件。在hebing函数中,使用glob库获取指定文件夹下的所有CSV文件,并打印出文件数量。
  2. 遍历所有CSV文件,对每个文件进行处理在处理过程中,首先创建一个空列表datalist,用于存储需要合并的数据行。
  3. 打开当前处理的CSV文件,逐行读取内容。如果当前行的索引是偶数且不为空行,则将该行添加到datalist中。
  4. datalist中的数据写入到合并后的总文件中,每个数据占一行。
  5. 在主程序中,调用hebing函数进行文件合并操作。

(4)词云生成

  1. 首先,定义一个名为word_segment的函数,该函数使用jieba库对输入的文本进行分词,并将分词结果以空格分隔的形式返回。
  2. 然后,定义一个名为generate_wordcloud的函数,该函数接受一个文本作为输入,并使用WordCloud库生成词云。词云的背景颜色设置为白色,最大显示词数为2000,背景图片为"淄博.png"以及"潍坊.png",停用词为STOPWORDS,字体路径为"msyh.ttf"
  3. 生成的词云图像保存到本地,并显示出来。

在这里插入图片描述

在这里插入图片描述
在主程序中,首先读取名为"zbcomments.csv"的文件内容,并将其存储在变量text中。然后,如果文本是中文文本,就调用chnSegment.word_segment函数对其进行分词处理。最后,调用plotWordcloud.generate_wordcloud函数生成词云。

(5)情感分析

  1. 首先使用SnowNLP对每一条评论进行评分:
    使用pandasread_csv函数将名为'source_files/wf.csv'的CSV文件加载到一个名为dfpandas数据框中。然后,初始化一个空列表sentiment_scores,用于存储情感分析的结果。
  2. 接着,使用一个for循环遍历数据框df的每一行,并对每一行的文本进行情感分析。使用SnowNLP类的实例化对象s对文本进行分析,并将情感得分添加到sentiment_scores列表中。在循环结束后,将情感得分列表添加到数据框df中,并创建一个新的列名为'sentiment_score'
  3. 最后,使用pandasto_csv函数将更新后的数据框保存到名为'score/data_with_sentiment_wf.csv'的新CSV文件中,同时设置index参数为False以避免在输出文件中包含索引列。

其次,对于打分进行标注,将情感值高于0.5的标注为积极,小于0.5为消极,等于0.5为中立。
基于三个情感态度,进行饼图的绘制。
最后,对于情感态度进行更深层次的分析,绘制相应的情感分布直方图。


三、数据分析结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、结论

本项目最终爬取潍坊市和淄博市几个热门景点的游客评论数据共计约5w条。分析实验结果可知,游客们对这几大热门景点的评价基本持积极肯定态度,持否定态度的游客群体相对较少。推测原因可能是选取的景点均为潍坊市、淄博市热门景点和地标性建筑,景区建设的投入较高,配套的服务设施也相对比较完善,因此得到了游客们普遍的积极反馈。
通过以上结果可以得出,大部分的游客对于潍坊和淄博的景点是觉得不错的,这表明潍坊和淄博在游客心中是一个不错的城市。


五、代码

利用爬虫爬取5万条城市评论并对其进行情感分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1361301.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日常测试工作中哪些是必须知道的 SQL 语句?

SQL 简介 SQL(Structured Query Language,结构化查询语言)是一套用于管理关系数据库管理系统(RDBMS),基于 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,比较重要的版本是 SQL92…

2023 最火的是什么? 超维计算 + 神经网络

从chatgpt开始,人工智能进步的步伐似乎势不可挡,但支撑这些程序的人工神经网络遇到了一些重大限制,其他的很难推理但是人类的大脑能够通过类比进行推理,当我们看到新事物时,我们不必生长新的神经元,我们可以…

飞凌全志T113-i开发板视频编码测试

前言 本文测试OK113i-S开发板-视频编解码的功能 OK113i-S开发板是支持视频的编解码的,下面是官方介绍的编解码功能 T113-i 是一种为多媒体解码平台设计的高级应用处理器。T113-i 集成了64位玄铁C906 RISC-V CPU, 双核 Cortex - A7 CPU 和 HiFi4 DSP&a…

Java反射篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、反射使用步骤(获取 Class 对象、调用对象方法)二、获取 Class 对象有几种方法三、利用反射动态创建对象实例前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

所有单片机使用的汇编语言是统一的吗?

所有单片机使用的汇编语言是统一的吗? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&…

跑通大模型领域的 hello world

跑通书生浦语大模型的 3 个趣味 demo(InternLM-Chat-7B 智能对话、Lagent工具调用解简单数学题、浦语灵笔多模态图文创作和理解)视频和文档。 1、两个框架 InternLM 是⼀个开源的轻量级训练框架,旨在⽀持⼤模型训练⽽⽆需⼤量的依赖。 Lage…

TSINGSEE青犀智能分析网关V4在智慧园区车辆违停检测场景中的应用

一、背景与需求 园区作为企业办公、生产制造的重要场所,主要道路车辆违停等违规行为会对园区的安全造成隐患,并且在上下班高峰期内,由于发现不及时,车辆违停行为会造成出入口拥堵现象,这也成为园区管理的棘手问题。为了…

提升软件质量与效率:UI自动化测试的重要性

在软件开发领域,UI自动化测试工具被广泛应用,其意义不仅仅体现在节省时间和资源上,更关系到软件质量的提升、团队效率的增加,以及用户体验的改善。本文将探讨使用UI自动化测试工具的重要性,以及它在软件开发生命周期中…

JVM知识总结(简单且高效)

1. JVM内存与本地内存 JVM内存:受虚拟机内存大小的参数控制,当大小超过参数设置的大小时会报OOM。本地内存:本地内存不受虚拟机内存参数的限制,只受物理内存容量的限制;虽然不受参数的限制,如果所占内存超过…

C语言学习NO.13-字符函数(三)-strncpy,strncat,strncmp长度受限制的字符串函数

长度受限制的字符串函数介绍 一、strncpy函数的使用 &#xff08;一&#xff09;strncpy使用 #include <stdio.h> #include <string.h>int main() {char arr1[20] "asdfgdfv";char arr2[7] "zxcvbn";strncpy(arr1, arr2, 4);printf("…

Origin无法使用主题管理器相关功能或报错:Err, Save Theme dialog error!

问题描述 在使用origin绘图时&#xff0c;往往需要进行大批量绘制同样类型的图。如果每个图都不断地去修改相关设置&#xff0c;无疑是浪费了许多宝贵的时间。为了提高绘图效率&#xff0c;了解到了主题管理器&#xff0c;可在“工具–主题管理器”找到。 然而&#xff0c;当我…

计算机毕业设计-----SSM宠物商城带后台管理系统

项目介绍 该项目为前后台项目&#xff0c;分为普通用户与管理员两种角色&#xff0c;前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 用户角色包含以下功能&#xff1a; 加入购物车,发表留言,提交订单,查看订单信息,会员注册,登录页面等功能。 管理员角色包含以下…

静态网页设计——极乐迪斯科(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV11k4y1X7mH/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

C++补充内容--EasyX-UI界面

esay x 其他 地图打印(利用二维数组) 双缓冲 当我们绘制一张图 然后另一张图盖住前一张图的某个部分的时候 由于while的存在 会导致 两张图不停的闪烁 所以加入双缓冲可以解决这个问题 开启双缓冲 之后等待Flush或者End 才会进行图片的绘制 不然不会进行图片的绘制,这样就可…

Python学习之路——文件部分【文件的读取】

目录 先解释一下引文的答案 一、open()打开函数 二、mode常用的三种基础访问模式 三、读-操作相关方法 &#xff08;一&#xff09;read方法 &#xff08;二&#xff09;readlines方法 &#xff08;三&#xff09;with open 语法 &#xff08;四&#xff09;操作汇总 …

腾讯云2核2G3M服务器够用吗?腾讯云2核2G3M云服务器性能评测

阿里云轻量应用服务器2核2G3M带宽优惠价格62元一年&#xff0c;100%CPU性能&#xff0c;3M带宽下载速度384KB/秒&#xff0c;40GB SSD系统盘&#xff0c;月流量200GB&#xff0c;折合每天6.6GB流量&#xff0c;超出月流量包的流量按照0.8元每GB的价格支付流量费&#xff0c;地域…

【c++】vector模拟

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕vector模拟 > 毒鸡汤&#xff1a;在等待…

PCL提示无法读取强度信息(Failed to find match for field ‘intensity‘.)简单解决方法

问题&#xff1a; 使用CC或者其他软件将las或者其他格式点云转成PCD格式后&#xff0c;然后使用PCL的库进行读取&#xff0c;有时会碰到Failed to find match for field intensity.提示&#xff0c;解决方法如下&#xff1b; 处理方法&#xff1a; 一个比较简单的方法如下&…

对比开源大语言模型的自然语言生成SQL能力

背景 NL-to-SQL&#xff08;自然语言到结构化查询语言&#xff09;任务是自然语言处理&#xff08;NLP&#xff09;领域的一个难题。 它涉及将自然语言问题转换为 SQL 查询&#xff0c;然后可以针对关系数据库执行该查询来回答问题。 该任务是 NLP 中的一个专门子领域&#xf…

C++补充内容--语法篇

这里写目录标题 语法其他语法函数的存储类函数参数默认值格式默认参数位置重载函数的默认参数 指针名与正常指针的自增自减以及解引用与的优先级问题指针的赋值、加减数字、加减指针二维数组中的一些指针辨析输出调用字符指针时 会将该指针以及之后的元素全部输出二维数组未完全…