You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Selenium爬取Google Flights航司及票价信息 解决空列表问题

Google航班爬虫定位问题修复方案

核心错误点

  • 访问URL拼写错误:原URL中searchtfs应为search?tfs,缺少路径和参数的分隔符?,会导致无法正常加载目标航班搜索结果。
  • 等待时间不足:Google航班属于动态渲染页面,1秒的等待时间不足以加载完全部航班数据,容易拿到未渲染完成的空结构。
  • XPath使用错误:提取航空公司的XPath使用了绝对路径,前缀的.没有生效,完全脱离了当前遍历的航班卡片节点,自然无法匹配到内容。
  • 定位属性不稳定:用到的class属性、data-gs属性大部分是Google前端框架生成的动态随机值,刷新页面、切换访问环境都会变化,完全不适合作为定位依据。

修复后代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from lxml import html

driver = webdriver.Chrome(r"C:\Users\14074\Python\chromedriver")
# 修正URL拼写错误
URL = 'https://www.google.com/travel/flights/search?tfs=CBwQAhopagwIAxIIL20vMHBseTASCjIwMjEtMTItMjNyDQgDEgkvbS8wMWYwOHIaKWoNCAMSCS9tLzAxZjA4chIKMjAyMS0xMi0yN3IMCAMSCC9tLzBwbHkwcAGCAQsI____________AUABSAGYAQE&tfu=EgYIAhAAGAA'

driver.get(URL)
# 替换固定sleep为显式等待,最多等10秒直到航班卡片加载完成
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_all_elements_located((By.XPATH, '//div[@role="listitem"]')))

tree = html.fromstring(driver.page_source)
# 用稳定的role属性定位航班卡片,Google航班的每个航班条目默认role为listitem
for flight_tree in tree.xpath('//div[@role="listitem"]'):
    # 用相对路径+相对稳定的class属性提取航空公司名称
    title = flight_tree.xpath('.//span[contains(@class, "h1fkLb")]/span/text()')
    # 用相对路径+相对稳定的class属性提取票价
    price = flight_tree.xpath('.//span[contains(@class, "YMlIz FpEdX")]/text()')

    # 过滤空值输出
    title = title[0].strip() if title else "未获取到航空公司"
    price = price[0].strip() if price else "未获取到票价"
    print(title, price)

driver.close()

额外注意事项

  • 如果运行后仍出现空值,先打印driver.page_source检查返回的页面内容,大概率是触发了Google的反爬人机验证,可通过添加代理、降低请求频率解决。
  • 如果定位失效,可自己打开页面F12检查结构,优先用role、aria-label这类业务属性定位,不要用浏览器复制的长绝对路径和动态class属性。
  • 长期使用建议对接官方航班数据接口,前端爬虫的稳定性远低于官方接口。

内容的提问来源于stack exchange,提问作者Nicholas O'Callaghan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:06:03