在本地商家运营分析、竞品调研等场景中,获取Google地图中商家的评分和评论数是核心需求之一。手动逐个查看记录的方式效率极低,借助Selenium模拟浏览器操作可以自动化完成这个流程,大幅提升数据收集效率。

环境准备
首先需要安装必要的依赖库,本文使用Python作为开发语言,需要安装Selenium和对应浏览器的驱动。以Chrome浏览器为例,执行以下命令安装依赖:
# 安装Selenium库 pip install selenium # 安装Chrome浏览器驱动管理工具,自动匹配对应版本的驱动 pip install webdriver-manager
核心实现步骤
1. 初始化浏览器并访问目标页面
使用Selenium启动Chrome浏览器,访问Google地图的搜索结果页面,这里以搜索纽约的咖啡店为例:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import time
# 配置Chrome选项,可选无头模式提升运行效率
chrome_options = Options()
# chrome_options.add_argument('--headless') # 取消注释可开启无头模式
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')
# 初始化浏览器驱动
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
# 访问Google地图搜索页面,搜索纽约咖啡店
search_url = "https://www.google.com/maps/search/纽约咖啡店/@40.7128,-74.0060,12z"
driver.get(search_url)
# 等待页面加载完成
time.sleep(5)
2. 定位商家卡片元素
Google地图的搜索结果页面中,每个商家会以卡片形式展示,需要通过开发者工具查看元素结构,定位到商家卡片的容器。这里使用XPath定位:
from selenium.webdriver.common.by import By
# 定位所有商家卡片元素,XPath根据实际页面结构调整
shop_cards = driver.find_elements(By.XPATH, '//div[contains(@class, "Nv2PK")]')
print(f"共找到{len(shop_cards)}个商家卡片")
3. 提取评分和评论数
遍历每个商家卡片,分别提取评分和评论数信息,注意处理部分商家没有评分或评论数的异常情况:
import re
shop_data = []
for card in shop_cards:
try:
# 提取商家名称
shop_name = card.find_element(By.XPATH, './/div[@class="qBF1Pd"]//span').text
# 提取评分,评分元素的class包含MW4etd
rating_element = card.find_elements(By.XPATH, './/span[contains(@class, "MW4etd")]')
rating = rating_element[0].text if rating_element else "无评分"
# 提取评论数,评论数元素的class包含UY7F9
review_element = card.find_elements(By.XPATH, './/span[contains(@class, "UY7F9")]')
if review_element:
# 提取数字部分,去除括号和逗号
review_text = review_element[0].text
review_count = re.search(r'd+', review_text.replace(',', ''))
review_count = review_count.group() if review_count else "0"
else:
review_count = "0"
# 存储数据
shop_data.append({
"商家名称": shop_name,
"评分": rating,
"评论数": review_count
})
except Exception as e:
print(f"提取单个商家数据失败:{e}")
continue
# 打印提取结果
for data in shop_data:
print(data)
4. 关闭浏览器释放资源
数据提取完成后,关闭浏览器释放系统资源:
driver.quit()
优化与注意事项
- 页面加载等待:Google地图页面是动态加载的,建议使用显式等待代替固定
time.sleep,避免元素未加载完成就执行提取操作,示例代码如下:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 显式等待,最多等待10秒,直到商家卡片元素出现
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//div[contains(@class, "Nv2PK")]'))
)
- 反爬处理:频繁请求可能会被Google限制,建议添加请求间隔、使用代理IP、随机切换user-agent,避免短时间内大量请求。
- 元素定位适配:Google地图的页面结构可能会更新,若提取失败需要重新通过开发者工具查看最新的元素class或XPath,调整定位逻辑。
- 数据分页:如果需要获取更多商家数据,可以模拟点击页面底部的下一页按钮,循环提取多页数据。
数据存储扩展
提取到的数据可以存储到CSV文件中,方便后续分析使用:
import csv
# 将数据写入CSV文件
with open('google_maps_shop_data.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.DictWriter(f, fieldnames=["商家名称", "评分", "评论数"])
writer.writeheader()
writer.writerows(shop_data)
print("数据已保存到google_maps_shop_data.csv")
SeleniumGoogle_mapsPythonweb_scraping修改时间:2026-06-12 16:33:18