👉博__主👈:米碼收割機
👉技__能👈:C++/Python語言
👉公眾號👈:測試開發自動化【獲取源碼+商業合作】
👉榮__譽👈:阿里云博客專家博主、51CTO技術博主
👉專__注👈:專注主流機器人、人工智能等相關領域的開發、測試技術。
python旅游網數據抓取分析
目錄
- python旅游網數據抓取分析
- 解析目標網址
- 城市及其景點數量分析
- 景點及其評分的數據
- 酒店價格信息分析
- 航班的價格數據分析
- 旅游目的地的評論數量分析
- 酒店評分數據分析
- 航班起飛時間的數據分析
- 熱門城市旅游攻略分析
解析目標網址
每個爬蟲針對特定的目標網站(去哪兒網)進行數據抓取和解析。每個爬蟲的功能和它們如何解析目標網站的數據。
-
WorldCountrySpider:爬蟲用于抓取世界各國家的名稱。它首先訪問 https://travel.qunar.com/,然后利用XPath解析網頁中的國家名稱。假設國家名稱被包裹在
<a>
標簽且類名為country-name中,爬蟲將提取所有這些標簽的文本內容。 -
CityAttractionSpider:爬蟲的目的是抓取特定城市的景點數量。它遍歷了一系列城市的URL(如上海、北京等),然后通過XPath從頁面中提取景點數量。假設景點數量信息位于ID為pager-container的
標簽的data-total-count屬性中。 -
DestinationCommentSpider:爬蟲用于統計特定目的地的評論數量。它訪問了包含評論信息的API URL,并使用正則表達式從響應中提取評論數量。爬蟲假定評論數量被包裹在標簽中。
-
FlightPriceSpider:爬蟲用于抓取特定航線的機票價格。它訪問了一個包含航班價格信息的API,并使用Python的json模塊來解析返回的JSON數據。爬蟲提取了出發城市、到達城市以及機票價格。
-
FlightTimeSpider:爬蟲旨在抓取航班的起飛時間。它同樣訪問了包含航班信息的API,并解析了JSON響應。然后,使用datetime模塊將日期字符串轉換為日期對象,以便后續處理。
-
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 的類,其功能是在爬蟲關閉時創建并保存中國省份和世界國家分布的地圖。
關注公眾號,👇👇👇回復 “旅游網數據抓取分析” 獲取源碼👇👇👇