使用 Python 和 Selenium 的航班价格检查器


网络爬取一直以来都是一种从网站提取数据的有用技术,用于各种目的,包括航空机票的价格检查。在本文中,我们将探讨如何使用 Selenium(一种流行的网页测试自动化工具)构建航班价格检查器。通过利用 Selenium 的功能,我们可以自动化收集和比较不同航空公司航班价格的过程,为用户节省时间和精力。

设置

Firefox 可执行文件

  • 这里下载 Firefox 浏览器安装程序

  • 下载完成后,安装浏览器,一个 exe 文件将自动放置在C:\Program Files\Mozilla Firefox\firefox.exe中。我们稍后会用到它。

Gecko 驱动程序

  • Windows 用户可以从这里下载 gecko 驱动程序。对于其他版本,请参阅发行说明

  • 解压 zip 文件并将“geckodriver.exe”文件放置在 C:\ 目录中。我们稍后将在代码中引用它。

Selenium Python 包

我们将使用最新版本的 Selenium Webdriver,因此使用 pip 安装以下内容:

pip3 install -U selenium
pip3 install -U webdriver-manager

算法

  • 导入必要的库 - Seleniumtime

  • 设置Firefox Gecko驱动程序路径

  • 打开要抓取的网站

  • 识别要抓取的必要元素

  • 输入出发和到达地点以及出发和返回日期

  • 点击搜索按钮

  • 等待搜索结果加载

  • 抓取不同航空公司的价格

  • 将数据存储为易于阅读和分析的格式

  • 比较价格并确定最便宜的选择

示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
import time

# Set Firefox options
firefox_options = Options()
firefox_options.binary_location = r'C:\Program Files\Mozilla Firefox\firefox.exe'

# Initialize webdriver with Firefox
driver = webdriver.Firefox(executable_path=r'C:\geckodriver.exe', options=firefox_options)

# Set URL and date of travel
url = 'https://paytm.com/flights/flightSearch/BBI-Bhubaneshwar/DEL-Delhi/1/0/0/E/2023-04-22'
date_of_travel = "2023-04-22"

# Print URL
print(f"URL: {url}")

# Load webpage
driver.get(url)

# Wait for 5 seconds
time.sleep(5)

# Find search button and click it
search_button = driver.find_element(By.CLASS_NAME, "_3LRd")
search_button.click()

# Find all elements with class name '_2gMo'
prices_elements = driver.find_elements(By.CLASS_NAME, "_2gMo")

# Get text of all elements
prices_text = [price.text for price in prices_elements]

# Convert text to integers
prices = [int(p.replace(',', '')) for p in prices_text]

# Display the minimum airfare price
print(f"Minimum Airfare Price: {min(prices)}")

# Display all prices
print(f"All prices:\n {prices}")

输出

Minimum Airfare Price: 4471
All prices:
 [4471, 4472, 4544, 4544, 4679, 4838, 5497, 5497, 5866, 6991, 7969, 8393, 8393, 8393, 8393, 8393, 8445, 8445, 8445, 8445, 8445, 8498, 8498, 8498, 8540, 8898, 8898, 8898, 8898, 8898, 9203, 9207, 9385, 10396, 10554, 10896, 11390, 11433, 11766, 11838, 11838, 11838, 12518, 12678, 12678, 12678, 12735, 12735, 12735, 12735, 12767, 12767, 12787, 12787, 12787, 12787, 12840, 12945, 12966, 12981, 13069, 13145, 13145, 13145, 13145, 13152, 13525, 13537, 13537, 13571, 13610, 13633, 13828, 13956, 14358, 14630, 14630, 14828, 14838, 15198, 15528, 15849, 15954, 16479, 17748, 17748, 18506, 20818, 20818, 20818, 20818, 21992, 23590, 24468, 25483, 25483, 26628, 75271]

解释

  • 首先,导入必要的库:来自 selenium 的 webdriver 和 Options,来自selenium.webdriver.common.by的 By,以及time

  • 接下来,使用 Options() 设置 Firefox 选项,并将 Firefox 的二进制文件位置设置为C:\Program Files\Mozilla Firefox\firefox.exe

  • 然后使用 Firefox 创建一个 webdriver 实例,使用webdriver.Firefox() 函数,传入 Gecko 驱动程序可执行文件的路径和 Firefox 选项。

  • 将 URL 和旅行日期分别设置为https://paytm.com/flights/flightSearch/BBI-Bhubaneshwar/DEL-Delhi/1/0/0/E/2023-04-22 和“2023-04-22”。然后将 URL 打印到控制台。

  • 使用driver.get(url)将网页加载到浏览器中。

  • 然后脚本使用time.sleep(5)等待 5 秒。

  • 使用driver.find_element(By.CLASS_NAME, "_3LRd")找到网页上的搜索按钮,并将其存储在 search_button 变量中。然后在 search_button 变量上调用 click() 方法来模拟点击按钮。

  • 使用driver.find_elements(By.CLASS_NAME, "_2gMo")找到网页上所有具有类名 _2gMo 的元素,并将它们存储在 prices_elements 列表中。

  • 使用列表推导式提取 prices_elements 列表中所有元素的文本,并将结果存储在prices_text列表中。

  • 使用 replace() 方法从 prices_text 中的每个元素中删除逗号,并将结果字符串转换为整数,使用 int()。这是使用另一个列表推导式完成的,生成的整数列表存储在 prices 列表中。

  • 使用min() 函数找到 prices 中的最小值,并将其打印到控制台。

  • 最后,将 prices 中的所有值打印到控制台。

应用

使用 Python 和 Selenium,此代码可用于开始从 Paytm 的航班搜索网站抓取机票价格,并且您可以根据需要修改它以满足特定需求,以及添加其他功能,例如将抓取的数据存储在文件中,以及发送包含价格的电子邮件通知等。

结论

Selenium 是一种强大的 Web 自动化和抓取工具,可用于在没有 API 的情况下从网站收集信息。Python 的多功能性、易用性和强大的工具生态系统使其成为抓取的完美语言。此脚本展示了如何仅用几行代码即可自动化浏览器活动并从网页检索数据。

更新于:2023-08-21

634 次查看

开启您的职业生涯

通过完成课程获得认证

立即开始
广告