如何用Selenium抓取Google Flights弹窗内的日期价格表格数据
解决Google Flights日期网格弹窗的数据抓取问题
Google Flights的日期网格弹窗属于当前页面内的模态组件,不需要切换窗口,直接定位弹窗内的元素即可抓取数据。以下是具体实现步骤和修改后的代码:
关键操作步骤
- 等待弹窗加载:弹窗打开后,先等待其核心容器元素可见,确保后续元素定位有效
- 定位日期与价格元素:通过分析弹窗DOM结构,定位每个日期项的日期文本和对应价格
- 批量提取数据:遍历所有日期项,整理成结构化数据
修改后的完整代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Chrome() driver.maximize_window() driver.get('https://www.google.com/travel/flights') wait = WebDriverWait(driver, 10) # 填写出发地和目的地 wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[aria-placeholder='Where from?'] input"))).click() wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[aria-label='Enter your origin'] input"))).send_keys("Sydney" + Keys.ARROW_DOWN + Keys.ENTER) wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[aria-placeholder='Where to?'] input"))).click() wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[aria-label='Enter your destination'] input"))).send_keys("Auckland" + Keys.ARROW_DOWN + Keys.ENTER) wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Search']"))).click() # 打开日期网格弹窗 wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Date grid']"))).click() # 等待日期网格弹窗加载完成 date_grid_container = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[aria-label='Date grid']"))) # 抓取所有日期项 date_items = date_grid_container.find_elements(By.CSS_SELECTOR, "div[role='gridcell']") # 提取日期和价格数据 flight_prices = [] for item in date_items: # 提取日期文本(如"10月5日") date_text = item.get_attribute("aria-label") # 提取价格文本,部分日期可能无价格,做容错处理 try: price_text = item.find_element(By.CSS_SELECTOR, "span[class*='U3gSDe']").text except: price_text = "无价格" if date_text: flight_prices.append({"日期": date_text, "价格": price_text}) # 打印抓取结果 for entry in flight_prices: print(f"{entry['日期']}: {entry['价格']}") driver.quit()
注意事项
- Google Flights的DOM结构可能会随时更新,如果CSS选择器失效,需要重新通过浏览器开发者工具(F12)查看最新的元素属性
- 部分日期可能没有航班价格,代码中加入了异常处理避免报错
- 建议根据网络情况适当调整等待时间,避免因加载慢导致元素定位失败
内容的提问来源于stack exchange,提问作者z star
相关产品推荐
相关产品推荐

