如何采集 Google Maps 数据:2026指南
了解如何采集 Google Maps 数据,包括可收集的商家字段、Python 基础示例、常见挑战,以及如何使用 Talordata SERP API 简化 Google Maps 数据采集流程。
Google Maps 是最有价值的本地商家数据来源之一。
一次搜索通常可以看到商家名称、分类、评分、评论数、地址、网站、电话、营业时间,以及地图结果中的排名位置。对于本地 SEO 团队、营销代理商、销售团队和市场研究人员来说,这些数据很有价值,因为它们反映了用户在搜索本地服务时实际看到的结果。
例如:
coffee shops in Austin
dentist near me
best hotels in Singapore
car repair in Chicago
Italian restaurants in Brooklyn
如果你只是偶尔查一两个关键词,手动搜索就够了。但如果你需要长期追踪数百个关键词、不同城市或多个区域,手动检查很快就会变得不可行。
这时候,Google Maps 数据采集就有了实际价值。
可以从 Google Maps 采集哪些数据?
Google Maps 结果会受到搜索关键词、国家、语言、设备、搜索位置等因素影响。不同查询下可见字段不一定完全相同,但常见可采集数据包括:
|
字段 |
示例 |
常见用途 |
|
商家名称 |
Joe’s Coffee House |
识别本地商家 |
|
商家分类 |
Coffee shop |
按行业分类 |
|
评分 |
4.6 |
分析商家口碑 |
|
评论数 |
1,240 reviews |
判断信任度与热门程度 |
|
地址 |
123 Main St, Austin |
分析地理覆盖 |
|
电话 |
+1 xxx-xxx-xxxx |
销售线索补充 |
|
网站 |
example.com |
网站与域名匹配 |
|
营业时间 |
Open ⋅ Closes 6 PM |
可用性研究 |
|
坐标 |
Latitude / longitude |
地图分析与聚类 |
|
排名位置 |
1, 2, 3… |
本地 SEO 排名追踪 |
对于大多数业务场景来说,最重要的字段通常是:
商家名称
排名位置
商家分类
评分
评论数
地址
网站
电话
地理位置
不需要一开始就采集所有字段。更好的做法是先明确你的业务问题,再决定需要哪些数据。
为什么要采集 Google Maps 数据?
Google Maps 数据的价值,在于它可以呈现本地搜索可见度。
同一家店可能在某个城市排名很好,但在另一个城市几乎看不到。某家餐厅可能评论分数很高,但在重要关键词下排名并不理想。某个本地竞争对手可能在特定街区或服务区域长期占据靠前位置。
Google Maps 数据采集可以把这些搜索结果转换成结构化数据,方便后续追踪、比较和分析。
常见使用场景
1. 本地 SEO 排名追踪
本地 SEO 团队需要知道某个商家在目标关键词下的排名情况。
例如,一家牙科诊所可能想追踪:
dentist in Austin
emergency dentist Austin
family dentist near me
teeth whitening Austin
通过定期收集 Google Maps 结果,SEO 团队可以监控排名变化、比较竞争对手,并评估本地优化策略是否有效。
2. 竞争对手监控
Google Maps 结果可以直接反映某个本地市场中谁更有可见度。
你可以追踪:
哪些竞争对手出现
它们的排名位置
它们的评分
它们的评论数
它们的商家分类
它们的位置
它们的网站
这对代理商、连锁品牌、本地服务商、酒店、餐厅、诊所和零售品牌都很有用。
3. 销售线索发现
销售团队常用 Google Maps 数据寻找符合条件的本地商家。
例如:
没有网站的餐厅
评论数较少的诊所
线上形象较弱的本地商店
特定城市和分类下的商家
评分不错但网站表现较弱的公司
这些数据可以用于外呼销售、CRM 补充、客户分层和市场开发。
4. 市场研究
Google Maps 也可以用来分析本地市场密度。
例如,市场研究团队可能想比较:
每个城市有多少健身房
哪些区域美容院更多
哪些街区餐饮竞争更密集
哪些本地分类有更高评论活跃度
这类数据可用于选址分析、竞争研究和区域扩张。
Google Maps API 与 Google Maps 采集有什么不同?
在建立采集工具之前,需要先理解 Google 官方 API 与 Google Maps 采集之间的差异。
Google Places API 提供 Text Search、Nearby Search、Place Details 等官方能力。Text Search 可以根据文字查询返回地点信息;Nearby Search 可以根据位置和地点类型查找附近地点。新版 Places API 也会使用 FieldMask 控制返回字段。
这种方式适合很多地点查询和应用程序场景。
但 SEO 和市场情报团队常常问的是另一类问题:
谁在这个本地关键词下排名?
哪些商家排在前面?
不同城市的结果有什么差异?
哪些竞争对手在多个位置都出现?
用户实际看到的本地搜索结果是什么样?
对这些场景来说,Google Maps SERP 数据通常比单纯的地点查询更有用。
开始之前:合规注意事项
Google Maps 相关数据的使用需要谨慎处理。
Google Maps Platform 条款对 Google Maps Content 的使用、批量下载、存储和再利用有明确限制。不同使用场景的合规要求也可能不同。
本文仅用于技术和教育说明。在收集、存储或使用 Google Maps 相关数据之前,建议先检查 Google 官方最新条款、所在地法律法规、隐私要求,以及你所在公司的内部合规政策。
对于生产环境,很多团队更倾向于使用结构化 SERP 数据服务,因为它们希望用更可控、更稳定的方式获取搜索结果数据,而不是长期维护脆弱的浏览器自动化流程。
如何用 Python 采集 Google Maps
一个基础 Google Maps 采集流程通常包括:
1. 打开 Google Maps 搜索 URL
2. 等待页面加载
3. 滚动结果面板
4. 提取可见商家列表数据
5. 将文本解析成结构化字段
6. 导出为 JSON 或 CSV
因为 Google Maps 是高度动态、依赖 JavaScript 的页面,所以使用 Playwright 这类浏览器自动化工具,通常比单纯 HTTP 请求更实际。
下面是一个简单的教学示例。
Step 1:创建 Python 项目
创建文件夹:
mkdir google-maps-scraper
cd google-maps-scraper
python -m venv venv
启用环境:
# macOS / Linux
source venv/bin/activate
# Windows
venv\Scripts\activate
安装 Playwright:
pip install playwright
python -m playwright install
创建文件:
touch scraper.py
Step 2:打开 Google Maps 搜索页
在 scraper.py 中加入:
import asyncio
from playwright.async_api import async_playwright
SEARCH_URL = "https://www.google.com/maps/search/coffee+shops+in+Austin"
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page(locale="en-US")
await page.goto(SEARCH_URL, wait_until="domcontentloaded", timeout=60000)
await page.wait_for_timeout(5000)
await browser.close()
asyncio.run(main())
执行:
python scraper.py
这段程序会打开 Google Maps,并加载一个本地搜索结果页。
测试时建议保留 headless=False,方便观察浏览器实际操作。
Step 3:滚动结果面板
Google Maps 不会一次加载所有商家。通常需要滚动左侧结果面板,才会逐步加载更多结果。
加入以下函数:
async def scroll_results(page, scroll_times=8):
feed = page.locator('div[role="feed"]')
for _ in range(scroll_times):
await feed.evaluate("(el) => el.scrollBy(0, el.scrollHeight)")
await page.wait_for_timeout(1500)
这会多次滚动结果面板。
在实际项目中,你可能还需要判断何时已经没有新结果加载。
Step 4:提取商家列表
Google Maps 结果卡片可能会变化,所以 selector 可能失效。初始做法可以先收集卡片文本和 accessible label。
加入:
async def extract_listings(page):
cards = page.locator('div[role="article"]')
count = await cards.count()
results = []
for i in range(count):
card = cards.nth(i)
try:
name = await card.get_attribute("aria-label")
text = await card.inner_text(timeout=3000)
results.append({
"position": i + 1,
"name": name,
"raw_text": text
})
except Exception:
continue
return results
这还不是完美数据集,但可以作为原始数据提取层。
Step 5:导出 JSON
完整程序如下:
import asyncio
import json
from playwright.async_api import async_playwright
SEARCH_URL = "https://www.google.com/maps/search/coffee+shops+in+Austin"
async def scroll_results(page, scroll_times=8):
feed = page.locator('div[role="feed"]')
for _ in range(scroll_times):
await feed.evaluate("(el) => el.scrollBy(0, el.scrollHeight)")
await page.wait_for_timeout(1500)
async def extract_listings(page):
cards = page.locator('div[role="article"]')
count = await cards.count()
results = []
for i in range(count):
card = cards.nth(i)
try:
name = await card.get_attribute("aria-label")
text = await card.inner_text(timeout=3000)
results.append({
"position": i + 1,
"name": name,
"raw_text": text
})
except Exception:
continue
return results
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page(locale="en-US")
await page.goto(SEARCH_URL, wait_until="domcontentloaded", timeout=60000)
await page.wait_for_timeout(5000)
await scroll_results(page)
results = await extract_listings(page)
with open("google_maps_results.json", "w", encoding="utf-8") as f:
json.dump(results, f, ensure_ascii=False, indent=2)
await browser.close()
asyncio.run(main())
执行后会得到:
google_maps_results.json
输出可能像这样:
[
{
"position": 1,
"name": "Example Coffee Shop",
"raw_text": "Example Coffee Shop\n4.6\n(1,240)\nCoffee shop\nAustin, TX\nOpen ⋅ Closes 6 PM"
}
]
Step 6:解析原始文本
原始文本有用,但大多数团队需要结构化字段。
可以先写一个简单 parser:
import re
def parse_listing(raw_text):
lines = [line.strip() for line in raw_text.split("\n") if line.strip()]
rating = None
review_count = None
for line in lines:
if re.match(r"^\d\.\d$", line):
rating = line
review_match = re.search(r"\(([\d,]+)\)", line)
if review_match:
review_count = review_match.group(1).replace(",", "")
return {
"lines": lines,
"rating": rating,
"review_count": review_count
}
这只是起点。
真实 Google Maps 页面会因国家、语言、商家分类和页面布局而变化。如果你需要稳定输出,就需要更完整的解析规则、测试样本、备用逻辑和监控机制。
为什么 Google Maps 采集很难?
建立一个简单 scraper 不难。
难的是让它长期稳定。
1. Google Maps 是动态页面
Google Maps 会逐步加载结果。有些数据要滚动后才出现,有些细节需要点击商家卡片才看得到。
你的 scraper 可能需要处理:
滚动
等待
点击
懒加载
详情面板
不同结果布局
复杂度会很快上升。
2. Selector 可能失效
Google Maps 页面不是为数据采集设计的稳定 API。
class name、DOM 结构和结果布局都可能变化。今天可用的 selector,之后可能失效。
这会带来持续维护成本。
3. 本地结果对位置非常敏感
同一个关键词,可能因为以下因素返回不同结果:
国家
城市
坐标
语言
设备
搜索上下文
对本地 SEO 追踪来说,这非常关键。
如果位置设置不一致,排名数据就不可靠。
4. 解析很容易变得混乱
Google Maps 列表文本不一定干净。
一个商家结果中可能包含评分、评论数、分类、地址、价格、营业时间、服务选项或短标签,而且顺序不固定。
你可能需要为不同数据写规则:
评分
评论数
地址
电话
营业时间
商家分类
暂停营业状态
广告结果
支持的市场越多,解析成本越高。
5. 大规模浏览器自动化成本高
跑一次本地 scraper 很简单。
但如果要跨城市、跨关键词、大批量定期采集,就完全不同。
你需要处理:
浏览器实例
超时
失败任务
数据校验
重复商家
定时任务
数据存储
监控
错误处理
这也是很多团队最后选择 SERP API 的原因。
更好的方式:使用 Google Maps SERP API
如果只是测试,浏览器 scraper 可以用。
如果是长期业务流程,SERP API 通常更容易维护。
你不需要打开 Google Maps、滚动页面、解析混乱 HTML,而是直接发送 API 请求,获取结构化数据。
典型流程如下:
1. 准备关键词
2. 准备目标位置
3. 发送 API 请求
4. 接收结构化 JSON
5. 存储结果
6. 分析排名、竞品与商家字段
Talordata SERP API 面向 Google 与其他主要搜索引擎的结构化搜索结果数据,支持地理位置定向 SERP、JSON / HTML 返回格式、Maps 搜索类型,以及按成功请求计费的模式。
这对需要重复收集本地搜索数据、但不想长期维护脆弱采集基础设施的团队更友好。
Talordata SERP API 工作流程示例
一个 Google Maps 数据流程可能像这样:
Keyword: coffee shops
Location: Austin, Texas, United States
Search type: Maps
Language: English
Output: JSON
请求结构可能如下:
curl -X POST "https://<talordata-serp-api-endpoint>" \
-H "Authorization: Bearer $TALORDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"engine": "google",
"type": "maps",
"q": "coffee shops in Austin",
"location": "Austin, Texas, United States",
"gl": "us",
"hl": "en",
"device": "desktop",
"output": "json"
}'
具体 endpoint 和参数应以 Talordata 后台或 API 文档为准。
结构化返回可能包含:
{
"search_metadata": {
"engine": "google",
"type": "maps",
"query": "coffee shops in Austin",
"location": "Austin, Texas, United States"
},
"local_results": [
{
"position": 1,
"title": "Example Coffee Shop",
"category": "Coffee shop",
"rating": 4.6,
"reviews": 1240,
"address": "Austin, TX",
"phone": "+1 xxx-xxx-xxxx",
"website": "https://example.com",
"hours": "Open ⋅ Closes 6 PM",
"coordinates": {
"latitude": 30.2672,
"longitude": -97.7431
}
}
]
}
这种数据比原始页面文本更容易接入数据库、看板、CRM、SEO 报表或内部分析工具。
使用 Talordata SERP API 的 Python 示例
生产流程中的程序可以更简洁:
import os
import json
import requests
API_KEY = os.getenv("TALORDATA_API_KEY")
ENDPOINT = "https://<talordata-serp-api-endpoint>"
payload = {
"engine": "google",
"type": "maps",
"q": "coffee shops in Austin",
"location": "Austin, Texas, United States",
"gl": "us",
"hl": "en",
"device": "desktop",
"output": "json"
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
response = requests.post(
ENDPOINT,
headers=headers,
json=payload,
timeout=60
)
response.raise_for_status()
data = response.json()
with open("talordata_google_maps_results.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
这样一来,团队可以把精力放在数据分析和业务流程,而不是浏览器自动化维护。
应该追踪哪些数据?
不要为了采集数据而采集数据。
先确定场景,再选字段。
本地 SEO 场景
建议追踪:
关键词
位置
商家名称
排名位置
评分
评论数
分类
时间戳
这可以帮助你追踪本地排名变化。
竞品监控场景
建议追踪:
竞品名称
排名位置
分类
评分
评论数
地址
网站
电话
这可以帮助你比较不同城市或服务区域中的可见竞争对手。
销售线索场景
建议追踪:
商家名称
分类
网站
电话
评分
评论数
地址
城市
这可以帮助你按销售潜力筛选商家。
市场研究场景
建议追踪:
分类
城市
坐标
评论量
商家密度
平均评分
这可以帮助你比较本地市场,找出竞争密集或供给不足的区域。
结语
Google Maps 数据可以帮助团队理解本地搜索可见度、竞争强度、商家密度和市场机会。
简单的 Python scraper 可以帮助你理解流程。但在真实业务中,Google Maps 采集会受到动态页面、selector 变化、位置敏感性和解析复杂度影响。
Talordata SERP API 提供了更实用的方式,帮助团队跨关键词和位置收集结构化搜索结果数据。与其把大量时间花在维护采集基础设施上,不如把重点放在分析、报表和决策上。
一个好的流程应该是:
定义目标关键词
选择位置
收集结构化结果
稳定存储数据
追踪变化
转化为行动
这样,Google Maps 数据就不只是一份商家清单,而是一套本地搜索情报系统。
FAQ
可以采集 Google Maps 吗?
技术上可以。你可以使用浏览器自动化工具打开 Google Maps、执行搜索、滚动结果面板,并提取可见商家数据。不过,Google Maps 数据使用涉及条款与合规问题,收集和存储数据前应先检查官方政策和适用法律。
Google Maps 结果中可以收集哪些数据?
常见字段包括商家名称、分类、评分、评论数、地址、网站、电话、营业时间、坐标和排名位置。具体可用字段会因查询、位置、语言、设备和页面布局而不同。
Google Places API 和 Google Maps 采集有什么不同?
Google Places API 是官方地点数据 API,适合 Text Search、Nearby Search、Place Details 等场景。Google Maps 采集或 SERP 型数据收集,更关注用户在特定关键词和位置下实际看到的本地搜索结果、排名和可见度。
什么时候应该使用 Google Maps SERP API?
当你需要跨多个关键词、城市、语言或设备定期收集本地搜索数据时,就适合使用 Google Maps SERP API。常见场景包括本地 SEO 追踪、竞品监控、销售线索发现和市场研究。
Talordata 可以帮助收集 Google Maps 数据吗?
可以。Talordata SERP API 支持结构化 SERP 数据、地理位置定向搜索结果、JSON / HTML 返回格式和 Maps 搜索类型,适合需要可扩展本地搜索数据流程的团队。