如何使用 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,會把它變成系統能準時登機的資料集。