如何使用 TalorData 抓取 Google 酒店评论搜索结果

了解如何使用 TalorData 抓取 Google 酒店评论搜索结果。本技术指南涵盖了 Google Hotels API 参数、Python requests 库的使用、酒店评分、评论数量、价格、地理位置、设施、预订选项、CSV 导出以及监控工作流等内容。

如何使用 TalorData 抓取 Google 酒店评论搜索结果
Ethan Caldwell
最后更新于
5 分钟阅读

Hotel search data 很适合用来理解酒店在 Google Hotels 中如何展示:排名、价格、评分、评论数、地点、设施、可订状态和 booking options。

对旅游平台、SEO 团队、酒店集团、OTA 和市场研究团队来说,这些数据可以回答:

问题

为什么重要

某个目的地搜索中出现哪些酒店?

市场可见度

哪些酒店在特定日期排名更高?

Travel SEO 和需求追踪

可见评分与评论数是多少?

Reputation monitoring

价格如何随入住日期变化?

Price intelligence

每家酒店有哪些 booking providers?

Channel monitoring

哪些酒店设施、可订状态更有竞争力?

Competitive analysis

问题是,Google Hotels 不是简单的静态页面。结果会因 location、check-in date、check-out date、guest count、language、device 和 availability 变化。手动复制数据,很快就会失控。

Google Hotels API workflow 可以把这些数据变成结构化 JSON。

TalorData 的 Google Hotels API 可用于采集 structured hotel search results,包括 hotel names、prices、ratings、reviews、locations、amenities、availability、booking options 和 ranking positions。TalorData Google Hotels 页面也展示了 qlocationgoogle_domaincheck_in_datecheck_out_dateadultsno_cache 等主要请求参数。

这里的 “hotel review search results” 是什么?

这篇指南中的 hotel review search results,不是指抓取每个 booking website 上的完整评论文字。

更常见的做法,是采集 Google Hotels 搜索结果中可见的 review-related signals,例如:

字段

含义

rating

平均评分

review_count

可见评论数

review_score

Guest review score

guest_rating

Guest rating label 或 score

review_signals

可见评论信号

position

酒店结果排名

hotel_name

酒店名称

price

显示价格

booking_options

Booking providers 和 links

amenities

设施与服务

location

地址或地理数据

TalorData 的 Google Hotels data 页面列出 rating、review count、review score、guest rating 和 visible review signals 等 rating & review data,也包含 price、location、amenities、availability 和 booking options。

对多数 SEO 和 travel intelligence workflow 来说,这些可见 review signals 已经足以做 reputation monitoring 和竞品比较。

使用场景

Workflow

Example

Hotel reputation tracking

监控 rating 和 review count 变化

Travel competitor analysis

比较酒店排名、价格、评分

Destination market research

采集城市与地区酒店结果

Booking channel monitoring

比较不同 booking providers 的曝光

Regional price comparison

比较不同市场酒店价格

Local SEO for hotels

检查酒店是否出现在目的地搜索中

AI travel agents

将结构化酒店选项喂给行程规划流程

TalorData 也将 hotel price monitoring、travel competitor analysis、destination market research、booking channel monitoring、reputation tracking 和 regional price comparison 作为 Google Hotels data 的常见 workflow。

核心 Google Hotels 参数

先从定义搜索上下文的参数开始。

Parameter

Required

Purpose

Example

engine

Yes

选择 Google Hotels search

google_hotels

q

Usually

酒店或目的地查询

hotels in Tokyo

location

建议使用

搜索地点上下文

Tokyo, Japan

google_domain

Optional

Google domain

google.com

check_in_date

Yes

入住日期

2026-07-15

check_out_date

Yes

离店日期

2026-07-18

adults

Optional

成人数

2

no_cache

Optional

强制获取新结果

true

Hotel search 没有日期,数据价值会很低。价格和可订状态都高度依赖入住与离店日期,所以 check_in_datecheck_out_date 应该被当成核心输入。

基本请求结构

实际 endpoint 和 authentication format,请以你的 TalorData dashboard 或 API docs 为准。

典型 JSON request:

{
  "engine": "google_hotels",
  "q": "hotels in Tokyo",
  "location": "Tokyo, Japan",
  "google_domain": "google.com",
  "check_in_date": "2026-07-15",
  "check_out_date": "2026-07-18",
  "adults": 2,
  "no_cache": true
}

Response 会返回可以解析成表格、dashboard、alerts 或 AI workflows 的 structured hotel search data。

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"

安装 Python dependencies:

pip install requests pandas

Step 2:建立可复用 Python client

这个 function 会发送 Google Hotels request 并返回 JSON。

如果你的 TalorData dashboard 使用不同 request style,请调整 endpoint、request body 或 headers。

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_hotels(
    query: str,
    location: str,
    check_in_date: str,
    check_out_date: str,
    adults: int = 2,
    google_domain: str = "google.com",
    no_cache: bool = True,
    extra_params: Optional[Dict[str, Any]] = None
) -> Dict[str, Any]:
    """
    Fetch Google Hotels search results 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_hotels",
        "q": query,
        "location": location,
        "google_domain": google_domain,
        "check_in_date": check_in_date,
        "check_out_date": check_out_date,
        "adults": adults,
        "no_cache": no_cache
    }

    if extra_params:
        payload.update(extra_params)

    headers = {
        "Authorization": f"Bearer {TALORDATA_API_KEY}",
        "Content-Type": "application/json"
    }

    response = requests.post(
        TALORDATA_SERP_ENDPOINT,
        json=payload,
        headers=headers,
        timeout=30
    )

    response.raise_for_status()
    return response.json()

执行基本搜索:

if __name__ == "__main__":
    data = fetch_google_hotels(
        query="hotels in Tokyo",
        location="Tokyo, Japan",
        check_in_date="2026-07-15",
        check_out_date="2026-07-18",
        adults=2
    )

    print(data)

Step 3:检查 raw response

写 parser 前,先检查 raw JSON。

import json

print(json.dumps(data, indent=2, ensure_ascii=False)[:5000])

这很重要,因为 response fields 可能会因 result type、destination、availability 和返回数据不同而变。

可以找这类 array:

hotel_results
properties
hotels
organic_results
results

不要过早猜字段。先看 JSON 洞穴墙上的纹路,再画地图。

Step 4:解析 hotel results

下面是一个较保守的 parser,会检查几个常见结果容器。

from typing import Any, Dict, List


def get_first_available_list(data: Dict[str, Any], keys: List[str]) -> List[Dict[str, Any]]:
    for key in keys:
        value = data.get(key)
        if isinstance(value, list):
            return value

    return []


def parse_hotel_results(data: Dict[str, Any]) -> List[Dict[str, Any]]:
    hotel_items = get_first_available_list(
        data,
        keys=[
            "hotel_results",
            "properties",
            "hotels",
            "organic_results",
            "results"
        ]
    )

    parsed = []

    for index, item in enumerate(hotel_items, start=1):
        parsed.append({
            "position": item.get("position", index),
            "hotel_name": item.get("name") or item.get("title"),
            "hotel_id": item.get("hotel_id") or item.get("property_token") or item.get("id"),
            "link": item.get("link") or item.get("hotel_link"),
            "thumbnail": item.get("thumbnail"),
            "rating": item.get("rating"),
            "review_count": item.get("review_count") or item.get("reviews"),
            "review_score": item.get("review_score"),
            "guest_rating": item.get("guest_rating"),
            "price": item.get("price"),
            "extracted_price": item.get("extracted_price"),
            "currency": item.get("currency"),
            "address": item.get("address"),
            "latitude": item.get("latitude"),
            "longitude": item.get("longitude"),
            "hotel_class": item.get("hotel_class"),
            "amenities": item.get("amenities"),
        })

    return parsed

使用方式:

data = fetch_google_hotels(
    query="hotels in Tokyo",
    location="Tokyo, Japan",
    check_in_date="2026-07-15",
    check_out_date="2026-07-18",
    adults=2
)

hotels = parse_hotel_results(data)

for hotel in hotels[:5]:
    print(hotel["position"], hotel["hotel_name"], hotel["rating"], hotel["review_count"])

Step 5:提取 review signals

如果重点是酒店评价监控,可以整理成更小的表。

def parse_hotel_review_signals(data: Dict[str, Any]) -> List[Dict[str, Any]]:
    hotels = parse_hotel_results(data)
    rows = []

    for hotel in hotels:
        rows.append({
            "position": hotel.get("position"),
            "hotel_name": hotel.get("hotel_name"),
            "rating": hotel.get("rating"),
            "review_count": hotel.get("review_count"),
            "review_score": hotel.get("review_score"),
            "guest_rating": hotel.get("guest_rating"),
            "price": hotel.get("price"),
            "currency": hotel.get("currency"),
            "address": hotel.get("address"),
            "link": hotel.get("link")
        })

    return rows

这张表适合看:

Metric

为什么重要

Position

搜索可见度

Rating

Reputation quality

Review count

信任与评论量

Guest rating

住客体验信号

Price

价格与口碑对比

Address

Property matching

Link

人工 QA 或 deeper inspection

Step 6:保存成 CSV

import pandas as pd


data = fetch_google_hotels(
    query="hotels in Tokyo",
    location="Tokyo, Japan",
    check_in_date="2026-07-15",
    check_out_date="2026-07-18",
    adults=2
)

review_rows = parse_hotel_review_signals(data)

df = pd.DataFrame(review_rows)
df.to_csv("google_hotel_review_signals.csv", index=False)

print(df.head())

CSV 可能长这样:

position

hotel_name

rating

review_count

price

1

Example Hotel Tokyo

4.6

1820

$210

2

Sample Inn Ginza

4.4

960

$185

3

Central Stay Tokyo

4.2

740

$160

Step 7:按 rating 和 review count 比较酒店

Review count 和 rating 应该一起看。

4.8 分但只有 12 条评论,和 4.6 分但有 3,000 条评论,不是一回事。

df["rating_num"] = pd.to_numeric(df["rating"], errors="coerce")
df["review_count_num"] = pd.to_numeric(df["review_count"], errors="coerce")

top_reviewed = df.sort_values(
    by=["review_count_num", "rating_num"],
    ascending=[False, False]
)

top_reviewed.to_csv("top_reviewed_hotels.csv", index=False)

print(top_reviewed[[
    "position",
    "hotel_name",
    "rating",
    "review_count",
    "price"
]].head(10))

常见分组:

Segment

Meaning

High rating + high review count

口碑强

High rating + low review count

有潜力但样本少

Low rating + high review count

知名但有口碑风险

High price + low rating

可能有转化问题

High rank + weak reviews

曝光强,但信任较弱

Step 8:追踪 hotel review signals 变化

抓一次有用,但定期抓更有价值。

每次保存 search context:

Context

Example

Query

hotels in Tokyo

Location

Tokyo, Japan

Check-in date

2026-07-15

Check-out date

2026-07-18

Adults

2

Collection timestamp

2026-06-30T09:00:00Z

Google domain

google.com

No cache

true

为每列加上 metadata:

from datetime import datetime, timezone


def add_search_context(
    rows: List[Dict[str, Any]],
    query: str,
    location: str,
    check_in_date: str,
    check_out_date: str,
    adults: int
) -> List[Dict[str, Any]]:
    collected_at = datetime.now(timezone.utc).isoformat()

    for row in rows:
        row["query"] = query
        row["location"] = location
        row["check_in_date"] = check_in_date
        row["check_out_date"] = check_out_date
        row["adults"] = adults
        row["collected_at"] = collected_at

    return rows

使用:

query = "hotels in Tokyo"
location = "Tokyo, Japan"
check_in_date = "2026-07-15"
check_out_date = "2026-07-18"
adults = 2

data = fetch_google_hotels(
    query=query,
    location=location,
    check_in_date=check_in_date,
    check_out_date=check_out_date,
    adults=adults
)

rows = parse_hotel_review_signals(data)
rows = add_search_context(
    rows,
    query=query,
    location=location,
    check_in_date=check_in_date,
    check_out_date=check_out_date,
    adults=adults
)

pd.DataFrame(rows).to_csv("hotel_review_snapshot.csv", index=False)

可以比较:

Change

Meaning

Rating increased

口碑改善

Review count increased

住客反馈增加

Position changed

搜索可见度变化

Price changed

价格或可订状态变化

Hotel disappeared

可订状态或排名问题

New competitor appeared

市场变化

Step 9:监控多个目的地

同一套 workflow 可以用于多个城市。

destinations = [
    {"query": "hotels in Tokyo", "location": "Tokyo, Japan"},
    {"query": "hotels in Seoul", "location": "Seoul, South Korea"},
    {"query": "hotels in Singapore", "location": "Singapore"},
]

all_rows = []

for destination in destinations:
    data = fetch_google_hotels(
        query=destination["query"],
        location=destination["location"],
        check_in_date="2026-07-15",
        check_out_date="2026-07-18",
        adults=2
    )

    rows = parse_hotel_review_signals(data)
    rows = add_search_context(
        rows,
        query=destination["query"],
        location=destination["location"],
        check_in_date="2026-07-15",
        check_out_date="2026-07-18",
        adults=2
    )

    all_rows.extend(rows)

pd.DataFrame(all_rows).to_csv("multi_destination_hotel_reviews.csv", index=False)

适合:

Team

Workflow

Hotel groups

比较品牌在不同城市的可见度

OTAs

追踪供给和口碑信号

Travel SEO teams

监控 destination SERPs

Market researchers

比较 hotel markets

AI travel agents

建立目的地感知的酒店推荐

Step 10:处理错误与重试

Travel data 会受日期、可订状态和 query context 影响。正式使用时应加入 retry logic。

import time
from requests import RequestException


def fetch_with_retries(
    query: str,
    location: str,
    check_in_date: str,
    check_out_date: str,
    adults: int = 2,
    retries: int = 3,
    delay_seconds: int = 2
) -> Dict[str, Any]:
    last_error = None

    for attempt in range(1, retries + 1):
        try:
            return fetch_google_hotels(
                query=query,
                location=location,
                check_in_date=check_in_date,
                check_out_date=check_out_date,
                adults=adults
            )
        except RequestException as error:
            last_error = error
            print(f"Attempt {attempt} failed: {error}")
            time.sleep(delay_seconds)

    raise RuntimeError(f"Failed after {retries} attempts: {last_error}")

正式环境也建议记录:

Log field

Why

Query

Debug search intent

Location

Debug local context

Dates

Debug availability

Status code

Debug API errors

Response time

Monitor speed

Request ID

Support troubleshooting

Error message

Fix failures faster

建议保存哪些字段?

Hotel review search monitoring 可以先用这个 schema:

{
  "query": "hotels in Tokyo",
  "location": "Tokyo, Japan",
  "check_in_date": "2026-07-15",
  "check_out_date": "2026-07-18",
  "adults": 2,
  "collected_at": "2026-06-30T09:00:00Z",
  "hotel": {
    "position": 1,
    "hotel_name": "Example Hotel Tokyo",
    "hotel_id": "example_hotel_id",
    "rating": 4.6,
    "review_count": 1820,
    "review_score": 9.1,
    "guest_rating": "Excellent",
    "price": "$210",
    "currency": "USD",
    "address": "Example address, Tokyo",
    "latitude": 35.6762,
    "longitude": 139.6503,
    "amenities": ["Free Wi-Fi", "Breakfast"],
    "link": "https://..."
  }
}

进阶 workflow 可以加:

Field

Use case

nightly_rate

Price comparison

total_price

Stay-level cost comparison

taxes_and_fees

True cost analysis

booking_options

OTA and channel monitoring

availability_status

Inventory tracking

hotel_class

Segment comparison

thumbnail

UI display

map_position

Local visibility

provider

Booking source analysis

TalorData 列出的 price fields 包括 price、extracted price、currency、nightly rate、total price、taxes 和 fees,也列出 provider、booking link、offer price、booking source、hotel website 和 deal details 等 booking option fields。

常见错误

没有设置 check-in 和 check-out dates

Hotel search data 高度依赖日期。一定要控制并保存日期。

比较不同 guest count

一位成人和两位成人的搜索,价格与可订状态都可能不同。

只看 rating

Rating 没有 review count,容易误判。两者要一起追踪。

忽略 position

酒店评分高但可见度低,仍然可能输给排名更靠前的竞品。

不保存 raw responses

建立 parser 时,请保存 raw JSON。不同目的地或结果类型可能字段不同。

忘记 localization

Hotel results 可能因 market、language、domain 和 search location 变化。请保存完整 search context。

结语

使用 TalorData 抓取 Google Hotel review search results,本质上是把 Google Hotels 变成结构化监控流程。开始免费测试Google Hotel API

先从核心 request fields 开始:

Parameter

Start with

engine

google_hotels

q

Destination 或 hotel query

location

Search location

google_domain

Google domain

check_in_date

未来入住日期

check_out_date

未来离店日期

adults

Guest count

no_cache

Freshness control

接着解析真正重要的字段:hotel name、position、rating、review count、price、address、amenities、availability 和 booking options。

数据变成 JSON 或 CSV 后,就可以支撑 reputation tracking、hotel price monitoring、OTA analysis、destination research、AI travel tools 和 local SEO dashboards。

Google Hotels data 像一个拥挤大厅;好的 API workflow 会把它整理成干净的住客名单。

立即开展您的数据业务

加入全球最强大的代理网络

免费试用