【python】python旅游网数据抓取分析(源码+论文)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


python旅游网数据抓取分析


目录

  • python旅游网数据抓取分析
  • 解析目标网址
  • 城市及其景点数量分析
  • 景点及其评分的数据
  • 酒店价格信息分析
  • 航班的价格数据分析
  • 旅游目的地的评论数量分析
  • 酒店评分数据分析
  • 航班起飞时间的数据分析
  • 热门城市旅游攻略分析


解析目标网址

每个爬虫针对特定的目标网站(去哪儿网)进行数据抓取和解析。每个爬虫的功能和它们如何解析目标网站的数据。

  1. WorldCountrySpider:爬虫用于抓取世界各国家的名称。它首先访问 https://travel.qunar.com/,然后利用XPath解析网页中的国家名称。假设国家名称被包裹在 <a>标签且类名为country-name中,爬虫将提取所有这些标签的文本内容。

  2. CityAttractionSpider:爬虫的目的是抓取特定城市的景点数量。它遍历了一系列城市的URL(如上海、北京等),然后通过XPath从页面中提取景点数量。假设景点数量信息位于ID为pager-container的

    标签的data-total-count属性中。

  3. DestinationCommentSpider:爬虫用于统计特定目的地的评论数量。它访问了包含评论信息的API URL,并使用正则表达式从响应中提取评论数量。爬虫假定评论数量被包裹在标签中。

  4. FlightPriceSpider:爬虫用于抓取特定航线的机票价格。它访问了一个包含航班价格信息的API,并使用Python的json模块来解析返回的JSON数据。爬虫提取了出发城市、到达城市以及机票价格。

  5. FlightTimeSpider:爬虫旨在抓取航班的起飞时间。它同样访问了包含航班信息的API,并解析了JSON响应。然后,使用datetime模块将日期字符串转换为日期对象,以便后续处理。

  6. HotelPriceSpider & HotelRatingSpider:爬虫分别用于抓取酒店的价格和评分信息。它们访问了包含酒店信息的API,并解析了返回的JSON数据。提取了酒店名称、城市、价格、房型、床型(对于价格爬虫)以及评分(对于评分爬虫)。
    数据解析方法:XPath: 用于从HTML响应中提取数据。XPath是一种在XML文档中查找信息的语言,也适用于HTML。
    正则表达式:用于从文本中提取符合特定模式的数据。
    JSON解析:用于处理返回JSON格式的响应,如API请求的结果。

关注公众号,回复 “旅游网数据抓取分析” 获取源码

在这里插入图片描述


城市及其景点数量分析

process_item 方法: 此方法是Pipeline的核心,它处理每个传递给Pipeline的项目(即在爬虫中提取的数据项)。对于QunarPipeline,它期望接收包含城市名称和景点数量的项目。方法中的逻辑是将城市名称作为键,景点数量作为值存储在self.data字典中。这种键值对存储方式简化了数据的聚合和后续处理。
close_spider 方法: 当爬虫结束时,此方法被调用。在这个阶段,所有的数据项都已经通过process_item方法处理并存储在self.data字典中。close_spider方法的作用是使用这些数据创建最终的可视化表示。使用pyecharts库中的Bar对象创建条形图,其中X轴表示城市名称,Y轴表示各个城市的景点数量。条形图的标题和其他全局选项也在此处设置。
数据可视化: 使用pyecharts创建的条形图可以直观地展示各个城市的景点数量对比。这种可视化对于理解和比较不同城市的旅游资源非常有用。最后,该条形图被渲染为一个HTML文件,可以在Web浏览器中查看。

关注公众号,回复 “旅游网数据抓取分析” 获取源码👇👇👇

在这里插入图片描述

部分代码如下:

class QunarPipeline:def open_spider(self, spider):self.data = {}def process_item(self, item, spider):self.data[item['city']] = item['attraction_count']return itemdef close_spider(self, spider):bar = Bar()bar.add_xaxis(list(self.data.keys()))bar.add_yaxis("Cities", list(self.data.values()))bar.set_global_opts(title_opts=opts.TitleOpts(title="城市景点数量直方图"))bar.render("bar_chart.html")

景点及其评分的数据

RatingPipeline 的主要功能是处理和可视化特定景点及其评分的数据。它专门针对爬取的景点评分数据进行处理和呈现。
open_spider 方法: 这个方法在爬虫启动时被调用。在这里,它初始化了一个空字典 self.data,用来存储景点名称及其对应的评分。此字典作为存储结构有助于后续的数据聚合和可视化。
在这里插入图片描述
RatingPipeline 精确地处理了景点评分数据,并有效利用pyecharts库生成了一种直观的可视化方式。这不仅提高了代码的可读性和可维护性,也提供了一种灵活的方法来展示和比较不同景点的评价。通过这样的可视化,用户可以更容易地根据评分选择景点。

部分代码如下:

class RatingPipeline:def open_spider(self, spider):self.data = {}def process_item(self, item, spider):self.data[item['place']] = item['score']return itemdef close_spider(self, spider):line = Line()line.add_xaxis(list(self.data.keys()))line.add_yaxis("评分", list(self.data.values()))line.set_global_opts(title_opts=opts.TitleOpts(title="地点评分折线图"))line.render("places_ratings_line_chart.html")

酒店价格信息分析

open_spider 方法: 在爬虫启动时被调用。此方法初始化两个主要结构:self.city_aver_price 字典用于存储每个城市的酒店平均价格,而 self.city_message_price 列表用于收集酒店的详细信息,包括名称、城市、价格、房型和床型。
process_item 方法: 此方法是Pipeline的关键部分,它处理每个酒店数据项。首先,酒店的详细信息被添加到 self.city_message_price 列表中。随后,该方法检查 self.city_aver_price 字典中是否已存在该酒店所在城市的键值。如果不存在,会为该城市创建一个新条目,用于存储所有酒店的价格。这些价格随后被用于计算每个城市的酒店平均价格。
close_spider 方法: 在爬虫结束时调用。这个方法首先将所有酒店的详细信息存储到CSV文件中,为数据分析和记录提供了一个可靠的数据源。接下来,该方法计算每个城市的酒店平均价格,并使用 pyecharts 库创建一个条形图来可视化这些数据。

在这里插入图片描述
HotelPricePipeline 有效地整合了酒店数据的收集、存储和可视化。通过这种方式,它不仅提供了有用的市场洞察,还以易于理解的格式呈现了数据,使得决策者和消费者可以根据实际数据做出更明智的选择。

部分代码如下:

class HotelPricePipeline:def open_spider(self, spider):self.city_aver_price = {}self.city_message_price = [["酒店名称", "城市", "价格", "房型", "床型"]]def process_item(self, item, spider):passdef close_spider(self, spider):# 保存数据到CSV文件with open('city_message_price.csv', mode='w', newline='', encoding='utf-8-sig') as file:writer = csv.writer(file)writer.writerows(self.city_message_price)# 计算每个城市的平均价格for city in self.city_aver_price:self.city_aver_price[city] = sum(self.city_aver_price[city]) / len(self.city_aver_price[city])

航班的价格数据分析

FlightPricePipeline 主要用于处理和分析航班的价格数据。它的核心功能是从爬虫返回的数据中提取航班价格信息,并基于这些数据创建可视化图表。
在这里插入图片描述

部分代码如下:

class FlightPricesPipeline:def open_spider(self, spider):self.arr_money = {'SHA': [], 'BJS': [], 'HGH': [], 'CKG': []}def process_item(self, item, spider):self.arr_money[item['dep_city']].append(item['price'])return itemdef close_spider(self, spider):scatter = Scatter()scatter.add_xaxis([str(x) for x in range(17)])  # 横轴为数据点的序号for city, values in self.arr_money.items():scatter.add_yaxis(city, values, symbol_size=10)scatter.set_series_opts(label_opts=opts.LabelOpts(is_show=False))scatter.set_global_opts(title_opts=opts.TitleOpts(title="城市数据散点图"),xaxis_opts=opts.AxisOpts(type_="category", name="城市"),yaxis_opts=opts.AxisOpts(type_="value", name="数据值"),)

旅游目的地的评论数量分析

DestinationCommentPipeline 专注于处理和可视化特定旅游目的地的评论数量数据。它的主要作用是从爬虫抓取的数据中提取评论计数,并将这些数据转换成可视化的形式,以提供关于各个旅游目的地受欢迎程度的直观理解。
在这里插入图片描述

酒店评分数据分析

HotelRatingPipeline 主要用于处理和可视化酒店评分数据。它的作用是收集各个酒店的评分信息,并将这些数据通过折线图的形式进行展示,以便用户能够直观地理解不同酒店的评分情况。

在这里插入图片描述


航班起飞时间的数据分析

FlightTimePipeline 专注于处理航班起飞时间的数据。其主要目标是收集各个城市的航班起飞时间,并通过箱线图的形式对这些数据进行可视化展示。

在这里插入图片描述

关注公众号,👇👇👇回复 “旅游网数据抓取分析” 获取源码👇👇👇


热门城市旅游攻略分析

代码定义了一个名为 TravelMapPipeline 的类,其功能是在爬虫关闭时创建并保存中国省份和世界国家分布的地图。

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

关注公众号,👇👇👇回复 “旅游网数据抓取分析” 获取源码👇👇👇

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

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

相关文章

逻辑漏洞(业务逻辑)dami CMS

逻辑漏洞&#xff08;业务支付逻辑漏洞&#xff09;dami CMS 0x01 业务逻辑简介 业务逻辑指的是一个系统或应用程序中的实际业务规则和流程。它描述了如何处理特定的业务需求、数据和操作。业务逻辑通常是根据特定行业或组织的需求而设计的。 在软件开发中&#xff0c;业务逻…

transformer之KV Cache

一、为什么要研究KV Cache 非常有效的加速推理速度&#xff0c;效果如下所示&#xff1a; import numpy as np import time import torch from transformers import AutoModelForCausalLM, AutoTokenizer NAME_OR_PATH r*************** device "cuda" if torch.cu…

基于docker实现JMeter分布式压测

为什么需要分布式&#xff1f; 在工作中经常需要对一些关键接口做高QPS的压测&#xff0c;JMeter是由Java 语言开发&#xff0c;没创建一个线程&#xff08;虚拟用户&#xff09;&#xff0c;JVM默认会为每个线程分配1M的堆栈内存空间。受限于单台试压机的配置很难实现太高的并…

[网鼎杯 2018]Fakebook

[网鼎杯 2018]Fakebook 打开环境出现一个登录注册的页面 在登录和注册中发现 了地址栏出现变化&#xff0c;扫一波看看 看看robots.txt和flag.php 访问robots.txt看看 再访问user.php.bak <?php class UserInfo { public $name ""; public …

扩散模型实战(十一):剖析Stable Diffusion Pipeline各个组件

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 扩散模型实战&#xff08;四&#xff…

JVM 之 class文件详解

目录 一. 前言 二. class文件结构 2.1. 文件格式 2.2. 魔数与版本号 2.3. 常量池 2.4. 访问标志 2.5. 类索引、父类索引和接口索引集合 2.6. 字段表集合 2.7. 方法表集合 2.8. 属性表集合 2.8.1. Code 属性表 2.8.2. Exceptions 属性 2.8.3. LineNumberTable 属性…

[Unity+OpenAI TTS] 集成openAI官方提供的语音合成服务,构建海王暖男数字人

1.简述 最近openAI官方发布了很多新功能&#xff0c;其中就包括了最新发布的TTS语音合成服务的api接口。说到这个语音合成接口&#xff0c;大家可能会比较陌生&#xff0c;但是说到chatgpt官方应用上的聊天机器人&#xff0c;那个台湾腔的海王暖男的声音&#xff0c;可能就有印…

Oracle与Redis Enterprise协同,作为企业缓存解决方案

来源&#xff1a;虹科云科技 虹科干货丨Oracle与Redis Enterprise协同&#xff0c;作为企业缓存解决方案 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 单独使用Oracle作为企业缓存数据库时&#xff0c;会出现哪些问题呢&#xff1f;使用Redis Enterprise与Oracle共…

汇编-CALL和RET指令

CALL指令调用一个过程&#xff0c; 使处理器从新的内存位置开始执行。过程使用RET(从过程返回) 指令将处理器转回到该过程被调用的程序点上。 CALL指令的动作&#xff1a; 1.将CALL指令的下一条指令地址压栈(作为子过程返回的地址) 2.将被调过程的地址复制到指令指针寄存器E…

七、通过libfdk_aac编解码器实现aac音频和pcm的编解码

前言 测试环境&#xff1a; ffmpeg的4.3.2自行编译版本windows环境qt5.12 AAC编码是MP3格式的后继产品&#xff0c;通常在相同的比特率下可以获得比MP3更高的声音质量&#xff0c;是iPhone、iPod、iPad、iTunes的标准音频格式。 AAC相较于MP3的改进包含&#xff1a; 更多的采…

Eclipse常用设置-乱码

在用Eclipse进行Java代码开发时&#xff0c;经常会遇到一些问题&#xff0c;记录下来&#xff0c;方便查看。 一、properties文件乱码 常用的配置文件properties里中文的乱码&#xff0c;不利于识别。 处理流程&#xff1a;Window -> Preferences -> General -> Ja…

「快学Docker」监控和日志记录容器的健康和性能

「快学Docker」监控和日志记录容器的健康和性能 1. 容器健康状态监控2. 性能监控3. 日志记录几种采集架构图 4. 监控工具和平台cAdvisor&#xff08;Container Advisor&#xff09;PrometheusGrafana 5. 自动化运维 1. 容器健康状态监控 方法1&#xff1a;需要实时监测容器的运…