如何使用 TalorData 抓取 Google 酒店评论搜索结果
了解如何使用 TalorData 抓取 Google 酒店评论搜索结果。本技术指南涵盖了 Google Hotels API 参数、Python requests 库的使用、酒店评分、评论数量、价格、地理位置、设施、预订选项、CSV 导出以及监控工作流等内容。
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 页面也展示了 q、location、google_domain、check_in_date、check_out_date、adults、no_cache 等主要请求参数。
这里的 “hotel review search results” 是什么?
这篇指南中的 hotel review search results,不是指抓取每个 booking website 上的完整评论文字。
更常见的做法,是采集 Google Hotels 搜索结果中可见的 review-related signals,例如:
|
字段 |
含义 |
|---|---|
|
|
平均评分 |
|
|
可见评论数 |
|
|
Guest review score |
|
|
Guest rating label 或 score |
|
|
可见评论信号 |
|
|
酒店结果排名 |
|
|
酒店名称 |
|
|
显示价格 |
|
|
Booking providers 和 links |
|
|
设施与服务 |
|
|
地址或地理数据 |
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 |
|---|---|---|---|
|
|
Yes |
选择 Google Hotels search |
|
|
|
Usually |
酒店或目的地查询 |
|
|
|
建议使用 |
搜索地点上下文 |
|
|
|
Optional |
Google domain |
|
|
|
Yes |
入住日期 |
|
|
|
Yes |
离店日期 |
|
|
|
Optional |
成人数 |
|
|
|
Optional |
强制获取新结果 |
|
Hotel search 没有日期,数据价值会很低。价格和可订状态都高度依赖入住与离店日期,所以 check_in_date 和 check_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 |
|
|
Location |
|
|
Check-in date |
|
|
Check-out date |
|
|
Adults |
|
|
Collection timestamp |
|
|
Google domain |
|
|
No cache |
|
为每列加上 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 |
|---|---|
|
|
Price comparison |
|
|
Stay-level cost comparison |
|
|
True cost analysis |
|
|
OTA and channel monitoring |
|
|
Inventory tracking |
|
|
Segment comparison |
|
|
UI display |
|
|
Local visibility |
|
|
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 |
|---|---|
|
|
|
|
|
Destination 或 hotel query |
|
|
Search location |
|
|
Google domain |
|
|
未来入住日期 |
|
|
未来离店日期 |
|
|
Guest count |
|
|
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 会把它整理成干净的住客名单。