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

🚀个人主页:为梦而生~ 关注我一起学习吧!
💡专栏
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.mzph.cn/news/600965.shtml

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

相关文章

Linux vi/vim 教程

文章目录 【 1. vi/vim 的三种模式 】1.1 命令模式1.2 输入模式1.3 底线命令模式 【 2. 实例 】【 3. vim 的其他命令 】 所有的 Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在。目前我们使用比较多的是 vim 编辑器。vim 从 vi 发展出来&am…

STM32G030C8T6:USART串口通信(中断)

本专栏记录STM32开发各个功能的详细过程,方便自己后续查看,当然也供正在入门STM32单片机的兄弟们参考; 本小节的目标是,系统主频64 MHZ,采用高速外部晶振,通过芯片PB6,PB7 的USART1 口,实现串口通信。 原理…

Docker nginx容器代理播放m3u8视频文件(HLS)

文章目录 Docker Nginx容器代理播放M3U8文件教程获取Nginx Docker镜像设置Nginx配置文件用 ffmpeg 将 MP4 文件转换成 m3u8 文件运行Docker容器测试M3U8流其他问题我用vlc都能播放http://192.168.121.50/forest4kTest.m3u8和http://192.168.121.50/forest4kTest.mp4&#xff0c…

用opencv的DNN模块做Yolov5目标检测(纯干货,源码已上传Github)

最近在微信公众号里看到多篇讲解yolov5在openvino部署做目标检测文章,但是没看到过用opencv的dnn模块做yolov5目标检测的。于是,我就想着编写一套用opencv的dnn模块做yolov5目标检测的程序。在编写这套程序时,遇到的bug和解决办法&#xff0c…

机器学习:手撕 AlphaGo(二)

计算机下围棋的问题描述请见上篇:机器学习:手撕 AlphaGo(一)-CSDN博客 3. MCTS 算法介绍 MCTS(Monte Carlo Tree Search) 算法的中文名称叫做蒙特卡洛树搜 索。第一次接触这个算法时,便惊叹于它…

Java 说一下 synchronized 底层实现原理?

Java 说一下 synchronized 底层实现原理? synchronized 是 Java 中用于实现同步的关键字,它保证了多个线程对共享资源的互斥访问。底层实现涉及到对象头的 Mark Word 和锁升级过程。 synchronized 可以用于方法上或代码块上,分别对应于方法…

Ubuntu 本地部署 ChatGPT-Next-Web

Ubuntu 本地部署 ChatGPT-Next-Web 文章目录 Ubuntu 本地部署 ChatGPT-Next-Web ChatGPT-Next-Web 项目地址:https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web 本文主要演示如何在 Ubuntu 本地(默认是端口 3000)部署 ChatGPT-Next-Web&am…

使用 Docker Compose 部署 Docker Registry

在内网环境中,我们期望能够在本地共享镜像。为了解决这一问题,Docker Registry成为了我们的救星。Docker Registry是一个用于存储和管理Docker镜像的开源工具。通过在本地部署Docker Registry,您可以轻松地构建、存储和分享自己的Docker镜像。…

[SwiftUI]工程最低适配iOS13

问题: 新建工程,选择最低支持iOS13报错: main() is only available in iOS 14.0 or newer Scene is only available in iOS 14.0 or newer WindowGroup is only available in iOS 14.0 or newer 解决: 注释掉上面代码&#x…

分布式系统架构设计之分布式缓存技术选型

一、概述 随着互联网业务的快速发展,分布式系统已经成为了解决大规模并发请求、高可用性、可扩展性等问题的重要手段。在分布式系统中,缓存作为提高系统性能的关键技术,能够显著降低数据库负载、减少网络延迟、提高数据访问速度。当面对大量…

jetson orin配置yolov8运行环境

配置yolov8环境 当前jetpack版本为5.1.1,对应的torch为1.14.0版本,torchvision版本为0.14.1,CUDA版本为11.4.315.opencv with cuda 版本4.5.4,tensorrt版本5.1.1。pytorch1.12.0 torchvision0.13.0 具体对应关系查看https://foru…

eureka注册列表 某服务出现多个服务实例

最近文件导出功能偶发成功,大部分情况都失败,开始以为接口被拦截,gateway服务没有接口调用日志,发现测试环境可以,正式环境功能无法正常使用。 偶然看到注册中心如下 发现file服务有3个实例,调用接口将错误…

基于单片机的农田灌溉系统(论文+源码)

1.系统设计 本系统主要实现如下目标: 1.可以实时监测土壤湿度; 2.土壤湿度太低时,进行浇水操作; 3.可以按键设置湿度的触发阈值; 4. 可以实现远程操控 5.可以实现手…

Vue中使用Element UI的Table组件实现嵌套表格(最简单示例)

以下是一个简单的示例代码&#xff0c;演示如何在Vue中使用Element UI的Table组件实现嵌套表格&#xff1a; html <template><div><el-table :data"tableData" style"width: 100%"><el-table-column prop"name" label&quo…

安卓作业002 - 用户登录窗口

文章目录 安卓作业002 - 用户登录窗口一、界面设计思路二、涉及的知识点概览三、界面实现步骤四、启动应用查看结果五、任务完成总结安卓作业002 - 用户登录窗口 利用到布局嵌套实现复杂界面居中对齐,利用线性布局的gravity属性标签、编辑框、按钮三种控件编辑框的提示信息,利…

实习记录留存

0.前提 实习结束了我留个档方便以后查看 校内实习玩具_哔哩哔哩_bilibili 不如这个爽 带兄弟们飙车_哔哩哔哩_bilibili

第九节HarmonyOS 常用基础组件6-progress

1、描述 进度条组件用于显示内容加载或操作处理等进度。 2、接口 Progress(options:{value:number,total?Number, type?:ProgressType}) 参数&#xff1a; 参数名 参数类型 必填 参数描述 value number 是 指定当前进度值。设置小于0的数值时置为0&#xff0c;设置…

各银行小微企业信贷相关产品和机器学习建模案例

各银行小微企业贷款业务 互联网的时代&#xff0c;大量新信息技术的涌现和网络的无处不在&#xff0c;想要抢占这片金融天地&#xff0c;必须重视小微金融业务&#xff0c;小微企业是一直具有重大潜力的客户&#xff0c;商业银行、消金公司发展小微信贷业务可以拓宽自身客户群…

嵌入式系统复习--基于ARM的嵌入式程序设计

文章目录 上一篇编译环境ADS编译环境下的伪操作GNU编译环境下的伪操作ARM汇编语言的伪指令 汇编语言程序设计相关运算操作符汇编语言格式汇编语言程序重点C语言的一些技巧 下一篇 上一篇 嵌入式系统复习–Thumb指令集 编译环境 ADS/SDT IDE开发环境&#xff1a;它由ARM公司开…

西电期末1025.平滑滤波

一.题目 二.分析与思路 别光看公式&#xff0c;读题干&#xff1a;“位置i的输出为距离i最近的三个输入的平均值”&#xff0c;再看示例&#xff0c;输入几个&#xff0c;输出几个&#xff0c;所以就是输出每个位置距离最近的三个输入的平均值&#xff0c;中间没什么问题&…