如何使用 TalorData 抓取 Google Flights 搜索数据

了解如何使用 TalorData 抓取 Google Flights 搜索数据。本技术指南涵盖了航线参数、日期、乘客信息、货币、Python requests 库的使用、航班数据解析、价格监控、多航线追踪、往返及多城市搜索、CSV 导出以及常见错误等内容。

talor ai
最後更新於
8 分鐘閱讀

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,例如 JFKLAXLHRSIN,有些 API 也支持 location identifiers,用于更宽泛的城市或地区搜索。

Parameter

Purpose

Example

engine

选择 Google Flights

google_flights

departure_id

出发机场或地点 ID

JFK

arrival_id

抵达机场或地点 ID

LAX

outbound_date

出发日期

2026-08-15

return_date

Round trip 回程日期

2026-08-22

flight_type or type

One-way、round-trip、multi-city

one_way / round_trip

adults

成人乘客数

1

children

儿童乘客数

0

currency

价格货币

USD

hl

界面语言

en

gl

国家上下文

us

travel_class

Economy、business 等

economy

stops

中转筛选

nonstop

no_cache

Freshness control

true

One-way search 的核心是 departure_idarrival_idoutbound_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_flightsother_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 → LAXNYC → Los Angeles area 不是同一个搜索。

覆盖旧数据

做 price monitoring 时,应该 append snapshots,而不是替换旧数据。

结语

使用 TalorData 抓取 Google Flights search data,本质上是把航班搜索转成结构化、可重复的数据流程。开始免费试用Google Flights API>>

先从 route 和 date parameters 开始:departure_idarrival_idoutbound_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,会把它变成系统能准时登机的数据集。

立即開展您的數據業務

加入全球最強大的代理網絡

免費試用