🚀个人主页:为梦而生~ 关注我一起学习吧!
💡专栏:
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数据和正则表达式。搜索小红书上的笔记,并根据给定的关键词、数量和排序方式获取相应的笔记信息。
- 导入所需的库:
json
、re
、requests
、OneNote
类(从xhs_utils.xhs_util
模块导入)以及get_headers
、get_search_data
、get_params
、js
和check_cookies
函数(从one
模块导入)。 - 定义一个名为Search的类,该类包含以下方法:
__init__
:初始化方法,用于设置cookies
、搜索URL
、请求头和参数。如果传入cookies
参数,则使用传入的cookies
,否则调用check_cookies()
函数获取cookies
。get_search_note
:根据给定的关键词和数量,获取搜索结果中的笔记ID
列表。该方法首先构造一个包含搜索数据的JSON
字符串,然后使用正则表达式替换其中的关键词和页码。接着,通过循环不断发送请求,直到获取到足够数量的笔记ID
或没有更多搜索结果为止。最后返回笔记ID
列表。handle_note_info
:根据给定的关键词、数量、排序方式和其他参数,处理搜索结果中的笔记信息。该方法首先构造一个包含搜索数据的JSON
字符串,然后使用正则表达式替换其中的关键词和页码。接着,通过循环不断发送请求,直到获取到足够数量的笔记信息或没有更多搜索结果为止。最后打印出搜索结果的数量。main
:主方法,用于接收用户输入的信息(关键词、数量和排序方式),并调用handle_note_info
方法处理搜索结果。
- 在程序的主入口点,创建一个
Search
类的实例,并设置搜索的关键词、数量和排序方式。然后调用main
方法开始搜索。
(2)爬取携程:
- 导入所需的库和模块:程序首先导入各种需要的库和模块,包括操作系统、时间、配置文件解析、HTTP请求、CSV文件处理、日志记录、JSON数据处理和文件操作等。
- 定义变量和常量:程序定义一些变量和常量,用于存储API接口地址、标志位、数据集合等。
- 定义函数:程序定义几个函数,用于获取城市编号、计算票价平均值、获取景点的票价信息等。
- 主程序执行流程:在主程序中,首先初始化日志记录器,然后读取配置文件中的参数。接下来,程序进入一个循环,循环爬取城市编号、景点列表数据、景点详情数据和票价数据。根据需要,程序还会爬取评论数据。最后,将爬取到的数据保存到文件中。
(3)数据处理:
将指定文件夹下的所有CSV文件合并成一个文件。主要运行流程如下:
- 导入
pandas
库和glob
库。定义一个名为hebing的函数,用于合并CSV文件。在hebing
函数中,使用glob库获取指定文件夹下的所有CSV文件,并打印出文件数量。 - 遍历所有CSV文件,对每个文件进行处理在处理过程中,首先创建一个空列表
datalist
,用于存储需要合并的数据行。 - 打开当前处理的CSV文件,逐行读取内容。如果当前行的索引是偶数且不为空行,则将该行添加到
datalist
中。 - 将
datalist
中的数据写入到合并后的总文件中,每个数据占一行。 - 在主程序中,调用
hebing
函数进行文件合并操作。
(4)词云生成
- 首先,定义一个名为
word_segment
的函数,该函数使用jieba库对输入的文本进行分词,并将分词结果以空格分隔的形式返回。 - 然后,定义一个名为
generate_wordcloud
的函数,该函数接受一个文本作为输入,并使用WordCloud
库生成词云。词云的背景颜色设置为白色,最大显示词数为2000,背景图片为"淄博.png"以及"潍坊.png",停用词为STOPWORDS,字体路径为"msyh.ttf"
。 - 生成的词云图像保存到本地,并显示出来。
在主程序中,首先读取名为"zbcomments.csv"
的文件内容,并将其存储在变量text中。然后,如果文本是中文文本,就调用chnSegment.word_segmen
t函数对其进行分词处理。最后,调用plotWordcloud.generate_wordcloud
函数生成词云。
(5)情感分析
- 首先使用
SnowNLP
对每一条评论进行评分:
使用pandas
的read_csv
函数将名为'source_files/wf.csv'
的CSV文件加载到一个名为df
的pandas
数据框中。然后,初始化一个空列表sentiment_scores
,用于存储情感分析的结果。 - 接着,使用一个
for
循环遍历数据框df
的每一行,并对每一行的文本进行情感分析。使用SnowNLP
类的实例化对象s对文本进行分析,并将情感得分添加到sentiment_scores
列表中。在循环结束后,将情感得分列表添加到数据框df中,并创建一个新的列名为'sentiment_score'
。 - 最后,使用
pandas
的to_csv
函数将更新后的数据框保存到名为'score/data_with_sentiment_wf.csv'
的新CSV文件中,同时设置index参数为False以避免在输出文件中包含索引列。
其次,对于打分进行标注,将情感值高于0.5的标注为积极,小于0.5为消极,等于0.5为中立。
基于三个情感态度,进行饼图的绘制。
最后,对于情感态度进行更深层次的分析,绘制相应的情感分布直方图。
三、数据分析结果
四、结论
本项目最终爬取潍坊市和淄博市几个热门景点的游客评论数据共计约5w条。分析实验结果可知,游客们对这几大热门景点的评价基本持积极肯定态度,持否定态度的游客群体相对较少。推测原因可能是选取的景点均为潍坊市、淄博市热门景点和地标性建筑,景区建设的投入较高,配套的服务设施也相对比较完善,因此得到了游客们普遍的积极反馈。
通过以上结果可以得出,大部分的游客对于潍坊和淄博的景点是觉得不错的,这表明潍坊和淄博在游客心中是一个不错的城市。
五、代码
利用爬虫爬取5万条城市评论并对其进行情感分析