【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.pswp.cn/news/161683.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161683.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161683.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言——結構體的應用

歸納編程學習的感悟&#xff0c; 記錄奮斗路上的點滴&#xff0c; 希望能幫到一樣刻苦的你&#xff01; 如有不足歡迎指正&#xff01; 共同學習交流&#xff01; &#x1f30e;歡迎各位→點贊 &#x1f44d; 收藏? 留言?&#x1f4dd; 路還在繼續&#xff0c;夢還在期…

webGL技術開發的軟件類型

WebGL 是一種在瀏覽器中渲染 2D 和 3D 圖形的 JavaScript API。通過 WebGL&#xff0c;你可以創建各種類型的軟件項目&#xff0c;特別是那些需要強大圖形渲染能力的項目。以下是一些你可以使用 WebGL 實現的軟件項目類型&#xff0c;希望對大家有所幫助。北京木奇移動技術有限…

老生常談之 JavaScript 中 0.1 + 0.2 != 0.3 的原因

先來一個模棱兩可的說法&#xff1a;因為精度丟失、存儲溢出的問題 先復習一下二進制的轉換方法&#xff1a; 整數&#xff1a;除以基數&#xff0c;取余&#xff0c;自底向上小數&#xff1a;乘以基數&#xff0c;取整&#xff0c;自頂向下 接著&#xff0c;復習一下雙精度…

Linux使用操作

各類小技巧 ctrlc強制停止 ctrld退出賬戶的登錄 或者退出某些特定程序的專屬頁面 history 查看歷史命令 !命令前綴&#xff0c;自動執行上一次匹配前綴的命令 ctrlr 輸入內容去匹配歷史命令 光標移動快捷鍵 ctrla&#xff0c;跳到命令開頭 ctrle&#xff0c;跳到命令結尾…

【C語言_題庫】輸入4個整數,要求按照從小到大的順序輸出

題目 輸入4個整數 要求按照從小到大的順序輸出 書上的學習輔導答案 // 主要部分 int main(){int t,a,b,c,d;printf("請輸入四個數:");scanf("%d,%d,%d,%d"

SkyWalking全景解析:從原理到實現的分布式追蹤之旅

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交給時間 &#x1f3e0; &#xff1a;小破站 SkyWalking全景解析&#xff1a;從原理到實現的分布式追蹤之旅 前言第一&#xff1a;SkyWalking簡介第二&#xff1a;實現原理概覽第三&#xff1a;主鍵與架構第四&#xff1…

【計算機基礎】通過插件plantuml,實現在VScode里面繪制狀態機

&#x1f4e2;&#xff1a;如果你也對機器人、人工智能感興趣&#xff0c;看來我們志同道合? &#x1f4e2;&#xff1a;不妨瀏覽一下我的博客主頁【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸對你有幫助&#xff0c;可點贊 &#x1f44d;…

數學與她的

文章目錄 定義域函數的定義域&#xff1a;一般地復合函數求解極值&#xff0c;單調性綜合考題&#xff1a; 定義域 函數的定義域&#xff1a; 求定義域的原則性問題&#xff08;通用&#xff09;分母不為0 偶次根式的被開方式為非負&#xff08; ≥ 0 &#xff09; 偶次根式的…

redis運維(十五) 集合

一 集合 ① 概念 集合的元素在redis里面的世界是member集合&#xff1a; setset集合當中不允許重復的元素&#xff0c;而且set集合當中元素是沒有順序的,不存在元素下標 ② sadd、smembers、srem ③ sismember、srandmember、spop、scard spop 命令用于移除集合中的指定 …

sql語法大全

1&#xff0c;創建數據庫 create database 數據庫名字; 2,查看所有的數據庫名稱 show databases; MySQL服務器已有4個數據庫&#xff0c;這些數據庫都是MySQL安裝時自動創建的。 information_schema 和 performance_schema 數據庫分別是 MySQL 服務器的數據字典&#xff08;…

CSS 漸變

linear-gradient() 線性漸變 /* 漸變軸為 45 度&#xff0c;從藍色漸變到紅色 */ linear-gradient(45deg, blue, red);/* 從右下到左上、從藍色漸變到紅色 */ linear-gradient(to left top, blue, red); /* to [left/right] [top/bottom] *//* 色標&#xff1a;從下到上&#…

算法——滑動窗口(Sliding Window)

一、背景知識 滑動窗口算法&#xff08;Sliding Window&#xff09;&#xff1a; 在給定數組 / 字符串上維護一個固定長度或不定長度的窗口。可以對窗口進行滑動操作、縮放操作&#xff0c;以及維護最優解操作。題型一&#xff1a;固定長度題型二&#xff1a;不固定長度 二、例…

TypeScript 學習筆記 第二部分 webpack 創建typescript項目

【視頻鏈接】尚硅谷TypeScript教程&#xff08;李立超老師TS新課&#xff09; 創建webpack 項目 IDE&#xff1a;webstorm 新建一個空的項目運行npm init初始化項目目錄結構 1. 安裝 webpack&#xff1a;構建工具webpack-cli&#xff1a; webpack的命令行工具typescript&am…

PCIE鏈路訓練-狀態機描述1

狀態機描述 Config.linkwidth.start&#xff1a; 1. &#xff08;1&#xff09;Linkup 0 狀態機沒有執行鏈路寬度的升級&#xff08;upconfiguration of the Link width&#xff09;&#xff1a;那么tx會在所有active的dsp上發送TS1&#xff0c;其中link num為具體內容&a…

git stash 用法總結

目錄 1&#xff0c;介紹場景1&#xff1a;場景2&#xff1a; 2&#xff0c;常用命令2.1&#xff0c;基礎2.2&#xff0c;進階1&#xff0c;存儲時指定備注2&#xff0c;通過索引來操作指定的存儲3&#xff0c;修改存儲規則 2.3&#xff0c;查看 stash 修改的具體內容 1&#xf…

Element UI之Dialog 對話框

Dialog 對話框 用于彈出窗口 按需引入方式 如果是完整引入可跳過此步驟 import Vue from vue import { Dialog } from element-ui import element-ui/lib/theme-chalk/base.css import element-ui/lib/theme-chalk/dialog.cssVue.use(Dialog)基礎使用 <template><…

摩爾定律,梅特卡夫定律,吉爾德定律

信息系統的三大定律(摩爾定律&#xff0c;梅特卡夫定律&#xff0c;吉爾德定律)有一個清晰的視角&#xff1a; 信息系統不是左邊的生產消費系統&#xff0c;而是右邊的交易系統&#xff0c;交易系統與生產消費典型的區別在于信息交易過程會產生新的信息&#xff0c;就像錢一樣…

c語言——俄羅斯方塊

一、游戲效果 俄羅斯方塊 二. 游戲背景 俄羅斯方塊是久負盛名的游戲&#xff0c;它也和貪吃蛇&#xff0c;掃雷等游戲位列經典游戲的?列。 《俄羅斯方塊》&#xff08;Tetris&#xff0c;俄文&#xff1a;Тетрис&#xff09;是一款由俄羅斯人阿列克謝帕基特諾夫于1984…

java http

超文本傳輸協議 超文本/html 工作方式 get / url 請求獲取相應報文 http://xxxxxxxxxxxx.com/user?xxx xxx 協議類型 - 服務器地址 -路徑 path 請求格式: head / body path路徑進行處理資源 等同于報文請求: GET: /users HTTP/1.1 Host:api.github.com 響應報文 請求方式…

京東數據分析平臺(京東運營數據采集):2023年10月京東白酒品牌銷售排行榜

鯨參謀監測的京東平臺10月份白酒市場銷售數據已出爐&#xff01; 鯨參謀數據顯示&#xff0c;10月份&#xff0c;京東平臺上白酒的銷量為340萬&#xff0c;環比增長約16%&#xff0c;同比增長約37%&#xff1b;銷售額為28億&#xff0c;環比增長約20%&#xff0c;同比增長約122…