使用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网站提取航班信息。在进行网络抓取时,务必注意法律和道德方面的考虑,例如遵守网站的服务条款,并避免过多的数据请求,以免服务器过载。