如何使用 TalorData 抓取 Google Flights 搜索数据
了解如何使用 TalorData 抓取 Google Flights 搜索数据。本技术指南涵盖了航线参数、日期、乘客信息、货币、Python requests 库的使用、航班数据解析、价格监控、多航线追踪、往返及多城市搜索、CSV 导出以及常见错误等内容。
Google Flights search data 适合用来获取实时航班信息,例如路线、航空公司、票价、中转、飞行时间、出发时间、抵达时间、booking options 和 fare changes。
对旅游平台、OTA、价格监控团队、市场研究团队和 AI travel agents 来说,这些数据可以支撑:
|
Workflow |
可以追踪什么 |
|---|---|
|
Flight price monitoring |
不同路线、日期、市场的票价 |
|
Airline visibility tracking |
哪些航空公司出现在某条路线 |
|
Route analysis |
直飞、中转、layovers、duration |
|
Travel deal discovery |
低于常态的票价 |
|
OTA product enrichment |
在旅游产品中加入航班选项 |
|
AI travel planning |
给 agent 实时航班上下文 |
|
Market research |
航线供给、航空公司组合与价格区间 |
重点是结构化。浏览器页面不容易保存、比较或喂给系统。JSON data 更适合用于 dashboards、alerts、reports 和 AI workflows。
这篇指南会建立一个 Python workflow:通过 TalorData 发送 Google Flights request,解析 response,提取航班数据,最后导出干净表格。
基本流程:
Route + date + passenger settings
↓
TalorData SERP API
↓
Google Flights data in JSON
↓
Parse flights, prices, airlines, stops, duration
↓
Save to CSV or database
↓
Use for monitoring, dashboards, or AI agents
可以采集哪些航班数据?
Google Flights workflow 最常用的字段通常是 route、date、schedule、airline、price 和 booking context。结构化航班 response 通常可包含 departure and arrival airports、flight duration、layovers、carbon emissions、prices 和 price insights。
|
Data field |
为什么重要 |
|---|---|
|
Departure airport |
定义出发地 |
|
Arrival airport |
定义目的地 |
|
Outbound date |
票价比较必需 |
|
Return date |
Round-trip tracking 必需 |
|
Airline |
追踪航空公司曝光 |
|
Flight number |
识别具体航班 |
|
Departure time |
用于时段筛选 |
|
Arrival time |
用于行程比较 |
|
Duration |
比较旅行质量 |
|
Stops |
分析直飞与中转 |
|
Layover airports |
分析航线结构 |
|
Price |
票价监控核心字段 |
|
Currency |
国际比较必需 |
|
Booking token or link |
继续查 booking options |
|
Collected timestamp |
价格历史必需 |
做 price monitoring 时,timestamp 不是可有可无。今天采集的 fare,明天可能就不一样。
核心 Google Flights 参数
Google Flights request 通常从 route、date、passenger、localization 和 output settings 开始。Airport ID 通常是三位 IATA airport code,例如 JFK、LAX、LHR、SIN,有些 API 也支持 location identifiers,用于更宽泛的城市或地区搜索。
|
Parameter |
Purpose |
Example |
|---|---|---|
|
|
选择 Google Flights |
|
|
|
出发机场或地点 ID |
|
|
|
抵达机场或地点 ID |
|
|
|
出发日期 |
|
|
|
Round trip 回程日期 |
|
|
|
One-way、round-trip、multi-city |
|
|
|
成人乘客数 |
|
|
|
儿童乘客数 |
|
|
|
价格货币 |
|
|
|
界面语言 |
|
|
|
国家上下文 |
|
|
|
Economy、business 等 |
|
|
|
中转筛选 |
|
|
|
Freshness control |
|
One-way search 的核心是 departure_id、arrival_id 和 outbound_date。Round trip 需要加入 return_date。Multi-city itinerary 则使用 multi-city payload。
基本请求结构
Endpoint 和 authentication format 请以你的 TalorData account 为准。下面是简单 one-way flight search 的 request shape。
{
"engine": "google_flights",
"departure_id": "JFK",
"arrival_id": "LAX",
"outbound_date": "2026-08-15",
"flight_type": "one_way",
"adults": 1,
"currency": "USD",
"hl": "en",
"gl": "us",
"no_cache": true
}
Round trip:
{
"engine": "google_flights",
"departure_id": "JFK",
"arrival_id": "LAX",
"outbound_date": "2026-08-15",
"return_date": "2026-08-22",
"flight_type": "round_trip",
"adults": 1,
"currency": "USD",
"hl": "en",
"gl": "us",
"no_cache": true
}
Step 1:设置 API key
将 TalorData API key 和 endpoint 存成环境变量。
export TALORDATA_API_KEY="your_api_key_here"
export TALORDATA_SERP_ENDPOINT="your_talordata_serp_endpoint_here"
Windows PowerShell:
setx TALORDATA_API_KEY "your_api_key_here"
setx TALORDATA_SERP_ENDPOINT "your_talordata_serp_endpoint_here"
安装 dependencies:
pip install requests pandas
Step 2:建立可复用 Python client
这个 function 会发送 Google Flights request 并返回 JSON。
import os
import requests
from typing import Any, Dict, Optional
TALORDATA_API_KEY = os.getenv("TALORDATA_API_KEY")
TALORDATA_SERP_ENDPOINT = os.getenv("TALORDATA_SERP_ENDPOINT")
def fetch_google_flights(
departure_id: str,
arrival_id: str,
outbound_date: str,
return_date: Optional[str] = None,
flight_type: str = "one_way",
adults: int = 1,
children: int = 0,
currency: str = "USD",
hl: str = "en",
gl: str = "us",
travel_class: str = "economy",
no_cache: bool = True,
extra_params: Optional[Dict[str, Any]] = None
) -> Dict[str, Any]:
"""
Fetch Google Flights search data with TalorData SERP API.
"""
if not TALORDATA_API_KEY:
raise RuntimeError("Missing TALORDATA_API_KEY environment variable.")
if not TALORDATA_SERP_ENDPOINT:
raise RuntimeError("Missing TALORDATA_SERP_ENDPOINT environment variable.")
payload: Dict[str, Any] = {
"engine": "google_flights",
"departure_id": departure_id,
"arrival_id": arrival_id,
"outbound_date": outbound_date,
"flight_type": flight_type,
"adults": adults,
"children": children,
"currency": currency,
"hl": hl,
"gl": gl,
"travel_class": travel_class,
"no_cache": no_cache
}
if return_date:
payload["return_date"] = return_date
if extra_params:
payload.update(extra_params)
response = requests.post(
TALORDATA_SERP_ENDPOINT,
json=payload,
headers={
"Authorization": f"Bearer {TALORDATA_API_KEY}",
"Content-Type": "application/json"
},
timeout=45
)
response.raise_for_status()
return response.json()
基本执行:
if __name__ == "__main__":
data = fetch_google_flights(
departure_id="JFK",
arrival_id="LAX",
outbound_date="2026-08-15",
flight_type="one_way",
adults=1,
currency="USD"
)
print(data)
Step 3:检查 raw response
建立 parser 前,先检查第一份 response。
import json
print(json.dumps(data, indent=2, ensure_ascii=False)[:6000])
Google Flights-style response 常见容器包括:
best_flights
other_flights
flights
price_insights
airports
search_parameters
实际结构可能因 request type、route 和 result mode 而不同。不要太早把 parser 刻成石碑。先用手电筒看 JSON 洞穴墙。
Step 4:解析 flight results
Google Flights response 常会把结果分成 best_flights 和 other_flights。每个 itinerary 可能包含一个或多个 flight segments。
from typing import Any, Dict, List
def get_flight_groups(data: Dict[str, Any]) -> List[Dict[str, Any]]:
groups = []
for group_name in ["best_flights", "other_flights", "flights"]:
value = data.get(group_name)
if isinstance(value, list):
for item in value:
item["_group"] = group_name
groups.append(item)
return groups
def parse_google_flights(data: Dict[str, Any]) -> List[Dict[str, Any]]:
itineraries = get_flight_groups(data)
rows = []
for position, itinerary in enumerate(itineraries, start=1):
segments = itinerary.get("flights", [])
first_segment = segments[0] if segments else {}
last_segment = segments[-1] if segments else {}
departure_airport = first_segment.get("departure_airport", {})
arrival_airport = last_segment.get("arrival_airport", {})
airlines = sorted({
segment.get("airline")
for segment in segments
if segment.get("airline")
})
flight_numbers = [
segment.get("flight_number")
for segment in segments
if segment.get("flight_number")
]
rows.append({
"position": position,
"group": itinerary.get("_group"),
"airlines": ", ".join(airlines),
"flight_numbers": ", ".join(flight_numbers),
"departure_airport_name": departure_airport.get("name"),
"departure_airport_id": departure_airport.get("id"),
"departure_time": departure_airport.get("time"),
"arrival_airport_name": arrival_airport.get("name"),
"arrival_airport_id": arrival_airport.get("id"),
"arrival_time": arrival_airport.get("time"),
"duration": itinerary.get("total_duration") or itinerary.get("duration"),
"stops": max(len(segments) - 1, 0),
"price": itinerary.get("price"),
"extracted_price": itinerary.get("extracted_price"),
"currency": itinerary.get("currency"),
"booking_token": itinerary.get("booking_token"),
"departure_token": itinerary.get("departure_token"),
"carbon_emissions": itinerary.get("carbon_emissions"),
"layovers": itinerary.get("layovers"),
})
return rows
使用方式:
data = fetch_google_flights(
departure_id="JFK",
arrival_id="LAX",
outbound_date="2026-08-15"
)
rows = parse_google_flights(data)
for row in rows[:5]:
print(row["position"], row["airlines"], row["price"], row["stops"])
Step 5:保存成 CSV
import pandas as pd
data = fetch_google_flights(
departure_id="JFK",
arrival_id="LAX",
outbound_date="2026-08-15",
flight_type="one_way",
adults=1,
currency="USD"
)
rows = parse_google_flights(data)
df = pd.DataFrame(rows)
df.to_csv("google_flights_results.csv", index=False)
print(df.head())
CSV 可能长这样:
|
position |
airlines |
departure_airport_id |
arrival_airport_id |
duration |
stops |
price |
|---|---|---|---|---|---|---|
|
1 |
JetBlue |
JFK |
LAX |
356 |
0 |
248 |
|
2 |
Delta |
JFK |
LAX |
375 |
0 |
265 |
|
3 |
United |
EWR |
LAX |
390 |
0 |
270 |
Step 6:加入 search context
没有 search context 的 flight result 很难比较。每次都要保存 route、date、passenger、currency、language、country 和 timestamp。
from datetime import datetime, timezone
def add_search_context(
rows: List[Dict[str, Any]],
departure_id: str,
arrival_id: str,
outbound_date: str,
return_date: Optional[str],
flight_type: str,
adults: int,
currency: str,
hl: str,
gl: str
) -> List[Dict[str, Any]]:
collected_at = datetime.now(timezone.utc).isoformat()
for row in rows:
row["departure_id"] = departure_id
row["arrival_id"] = arrival_id
row["outbound_date"] = outbound_date
row["return_date"] = return_date
row["flight_type"] = flight_type
row["adults"] = adults
row["currency"] = currency
row["hl"] = hl
row["gl"] = gl
row["collected_at"] = collected_at
return rows
Step 7:追踪价格变化
Fare monitoring 通常关心每条 route 和 date 的最低价格。
df["price_num"] = pd.to_numeric(df["extracted_price"], errors="coerce")
cheapest = df.sort_values(
by=["price_num", "stops"],
ascending=[True, True]
).head(10)
cheapest.to_csv("cheapest_google_flights.csv", index=False)
print(cheapest[[
"position",
"airlines",
"departure_airport_id",
"arrival_airport_id",
"stops",
"duration",
"price",
"price_num"
]])
可追踪的 signals:
|
Signal |
Meaning |
|---|---|
|
Lowest price changed |
Fare movement |
|
Airline changed |
Carrier visibility shift |
|
Direct flight disappeared |
Route availability change |
|
Stops increased |
路线便利性下降 |
|
Duration increased |
Route quality 变差 |
|
Booking token changed |
Offer 或 itinerary 变化 |
做 recurring jobs 时,不要覆盖旧数据。应该 append 到 database 或 daily CSV。
Step 8:监控多条路线
routes = [
{"departure_id": "JFK", "arrival_id": "LAX"},
{"departure_id": "SFO", "arrival_id": "SEA"},
{"departure_id": "LHR", "arrival_id": "CDG"},
]
all_rows = []
for route in routes:
data = fetch_google_flights(
departure_id=route["departure_id"],
arrival_id=route["arrival_id"],
outbound_date="2026-08-15",
flight_type="one_way",
adults=1,
currency="USD"
)
rows = parse_google_flights(data)
for row in rows:
row["departure_id"] = route["departure_id"]
row["arrival_id"] = route["arrival_id"]
row["outbound_date"] = "2026-08-15"
all_rows.extend(rows)
pd.DataFrame(all_rows).to_csv("multi_route_google_flights.csv", index=False)
适合:
|
Use case |
What to compare |
|---|---|
|
Route price monitoring |
每条路线最低价 |
|
Airline benchmarking |
哪些 carrier 更常出现 |
|
Direct flight availability |
直飞与中转 |
|
Market analysis |
航线供给与价格 |
|
Travel deal detection |
异常低价 |
|
AI travel tools |
按路线提供当前选项 |
Step 9:处理 round trips
Round-trip data 可能更复杂,因为 outbound selection 可能决定 return options。
简单 round-trip request:
data = fetch_google_flights(
departure_id="JFK",
arrival_id="LAX",
outbound_date="2026-08-15",
return_date="2026-08-22",
flight_type="round_trip",
adults=1,
currency="USD"
)
如果 response 返回 departure_token,你可以用第二次 request 获取 return-flight options。Google Flights-style API 常用 departure token 或 booking token 从初始结果继续查下一段或 booking options。
Step 10:Multi-city flight search
Multi-city itinerary 使用多段 flight segments。
multi_city_json = [
{
"departure_id": "JFK",
"arrival_id": "LHR",
"date": "2026-08-15"
},
{
"departure_id": "LHR",
"arrival_id": "CDG",
"date": "2026-08-20"
},
{
"departure_id": "CDG",
"arrival_id": "JFK",
"date": "2026-08-25"
}
]
data = fetch_google_flights(
departure_id="",
arrival_id="",
outbound_date="",
flight_type="multi_city",
adults=1,
currency="USD",
extra_params={
"multi_city_json": multi_city_json
}
)
Multi-city 适合:
|
Workflow |
Example |
|---|---|
|
Complex trip planning |
New York → London → Paris → New York |
|
Business travel |
多段差旅 |
|
Travel agent tools |
定制 itinerary |
|
Fare comparison |
比较组合路线 |
|
AI travel planners |
生成 multi-leg options |
常见错误
不保存 timestamp
航班价格会变。每次 snapshot 都要有 collection time。
比较不同乘客设置
一位成人和两位成人可能返回不同总价。要保存 passenger settings。
混用 currencies
比较前要保存 currency,并做价格标准化。
只看 price
低价但中转两次,未必比稍贵的直飞更好。
忽略 route context
JFK → LAX 和 NYC → Los Angeles area 不是同一个搜索。
覆盖旧数据
做 price monitoring 时,应该 append snapshots,而不是替换旧数据。
结语
使用 TalorData 抓取 Google Flights search data,本质上是把航班搜索转成结构化、可重复的数据流程。开始免费试用Google Flights API>>
先从 route 和 date parameters 开始:departure_id、arrival_id、outbound_date,需要 round trip 时加 return_date。再加入 passenger count、currency、language、country、travel class 和 filters。接着解析 airline、flight number、price、duration、stops、airports、times 和 booking tokens。
数据一旦结构化,就可以建立 price alerts、fare dashboards、airline visibility reports、travel market analysis 和 AI travel agents。
Google Flights data 像一块一直跳动的出发看板。好的 API workflow,会把它变成系统能准时登机的数据集。