使用Python獲取航班狀態


“航班狀態”指的是航班的當前狀況,例如是否準點、延誤或取消。您可以訪問航空公司的網站並輸入航班號或出發和到達機場來查詢航班狀態。然後,從HTML頁面獲取必要的資料,使用BeautifulSoup模組進行結構化處理,並用於評估航班是否準點、延誤或取消。為了撰寫這篇博文,我們將使用Python獲取航班狀態。

安裝

在開始之前,必須在您的機器上安裝Python和BeautifulSoup庫,因此請啟動您的終端並使用pip進行安裝。

pip install requests
pip install beautifulsoup4

演算法

匯入必要的庫——此程式所需的庫是'requests'、'BeautifulSoup'和'datetime'。

  • 定義`get_flight_details`函式,該函式以'airline_code'、'flight_number'、'date'、'month'和'year'作為輸入引數。

  • 定義`get_data`輔助函式,該函式從URL檢索HTML資料。

  • 使用輸入引數和FlightStats網站格式構造URL。

  • 使用`get_data`輔助函式和URL檢索HTML資料。

  • 使用BeautifulSoup解析HTML資料並返回解析後的HTML資料。

  • 定義`get_airport_names`函式,該函式以解析後的HTML資料作為輸入。

  • 從解析後的HTML資料中檢索機場名稱,並列印航班號、航班名稱、出發機場和到達機場。

  • 定義`get_flight_status`函式,該函式以解析後的HTML資料作為輸入。

  • 從解析後的HTML資料中檢索登機口號、狀態和時間狀態詳細資訊,並列印它們。

  • 定義航空公司程式碼、航班號、當前日期、日期、月份和年份的輸入引數。

  • 使用輸入引數呼叫`get_flight_details`函式來檢索解析後的HTML資料。

  • 使用解析後的HTML資料呼叫`get_airport_names`函式來檢索和印表機場名稱。

  • 使用解析後的HTML資料呼叫`get_flight_status`函式來檢索和列印航班狀態詳細資訊。

請注意,我們將使用CSS選擇器和BeautifulSoup提供的`find()`函式來獲取下圖中突出顯示的元素。

示例

import requests
from bs4 import BeautifulSoup
from datetime import datetime

def get_flight_details(airline_code, flight_number, date, month, year):
   def get_data(url):
      response = requests.get(url)
      return response.text

   # Construct URL using input parameters
   url = f"https://www.flightstats.com/v2/flight-tracker/{airline_code}/{flight_number}?year={year}&month={month}&date={date}"

   # Get HTML data from URL
   html_data = get_data(url)

   # Parse HTML using BeautifulSoup
   soup = BeautifulSoup(html_data, 'html.parser')

   # Return parsed HTML data
   return soup


def get_airport_names(soup):
   airport_names = [
      i.get_text()
      for i in soup.find_all(
         "div", class_="text-helper__TextHelper-sc-8bko4a-0"
      )
   ]
   print("Flight No:", airport_names[0])
   print("Flight Name:", airport_names[1])
   print("FROM:", airport_names[2], airport_names[3])
   print("TO:", airport_names[4], airport_names[5])


def get_flight_status(soup):
   gates = [
      data.get_text()
      for data in soup.find_all(
         "div",
         class_="ticket__TGBLabel-s1rrbl5o-15 gcbyEH text-helper__TextHelper-sc-8bko4a-0 efwouT",
      )
   ]
   gate_numbers = [
      data.get_text()
      for data in soup.find_all(
         "div",
         class_="ticket__TGBValue-sc-1rrbl5o-16 hUgYLc text-helper__TextHelper-sc-8bko4a-0 kbHzdx",
      )
   ]
   statuses = [
      i.get_text()
      for i in soup.find_all(
         "div", class_="text-helper__TextHelper-sc-8bko4a-0 feVjck"
      )
   ]
   time_statuses = [
      i.get_text()
      for i in soup.find_all(
         "div", class_="text-helper__TextHelper-sc-8bko4a-0 kbHzdx"
      )
   ]

   print("Gate No: ", gate_numbers[0])
   print("Status: ", statuses[0])
   print(f"FROM: {time_statuses[0]} | TO: {time_statuses[2]}")


# Input parameters
airline_code = 'AA'
flight_number = '1'
current_date = datetime.now()
date = str(current_date.day+1)
month = str(current_date.month)
year = str(current_date.year)
soup = get_flight_details(airline_code, flight_number, date, month, year)
get_airport_names(soup)
get_flight_status(soup)

輸出

Flight No: AA 1
Flight Name: American Airlines
FROM: JFK New York
TO: LAX Los Angeles
Gate No:  8
Status:  On time
FROM: 07:15 EDT | TO: 10:35 PDT

BeautifulSoup模組解析HTML資料,並根據輸入引數從FlightStats網站收集航班資訊。指令碼將`get_flight_details()`、`get_airport_names()`和`get_flight_status()`指定為其兩個主要函式。`get_flight_details()`函式使用輸入引數建立URL,使用requests庫向該URL傳送GET請求,然後從響應中檢索HTML資料。然後使用BeautifulSoup解析HTML資料,並返回處理後的HTML資料。

`get_airport_names()`函式使用BeautifulSoup從解析後的HTML資料中提取機場名稱。然後列印航班號、航班名稱、出發機場名稱、到達機場名稱和機場程式碼。`get_flight_status()`函式也接收解析後的HTML資料作為輸入,然後使用BeautifulSoup檢索航班狀態資訊。然後列印登機口號、當前航班狀態、出發時間和到達時間。主指令碼使用輸入引數(包括航空公司程式碼、航班號、日期、月份和年份)初始化後,使用`get_flight_details()`函式接收解析後的HTML資料。然後,它呼叫`get_airport_names()`和`get_flight_status()`函式分別提取和輸出機場名稱和航班狀態資訊。

應用

乘客、航空公司員工和資料分析師都可以從即時訪問航班資料中獲益。可以使用Python和BeautifulSoup來自動化從多個網站收集航班資訊的過程,從而提高速度和效率。這對於旅客來說非常方便,他們可以無需撥打航空公司電話或訪問多個網站即可檢視航班狀態。航空公司專業人員可以使用這些資訊來輔助人員排程、航班安排和其他決策。資料分析師可以檢視航空旅行中的模式和趨勢,以預測未來的需求和容量,並識別提高效率和降低成本的機會。

結論

本文介紹了網路抓取以及如何嘗試從網站提取資訊。它涵蓋了使用Python庫(如BeautifulSoup和Requests)以及網路抓取的基礎知識,包括HTML、CSS和文件物件模型(DOM)。然後,它提供了一個逐步的網路抓取教程,使用一個簡單的Python指令碼來從FlightStats網站提取航班資訊。在進行網路抓取時,務必注意法律和道德方面的考慮,例如遵守網站的服務條款,並避免過多的資料請求,以免伺服器過載。

更新於:2023年7月18日

675 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告