在当下的本地商家运营分析与竞品市场调研场景中,获取Google地图中商家的评分和评论数量是极为关键的数据收集需求。传统的手动逐个查看并记录的方式不仅效率极低,而且容易因为人为疲劳导致数据录入错误。借助Selenium自动化测试工具来模拟真实用户的浏览器操作,可以高效、准确地完成这一繁琐流程,从而大幅提升数据收集的整体效率与质量。通过编写自动化脚本,我们能够批量获取目标区域内所有商家的核心评价指标,为后续的商业决策提供坚实的数据支撑。

自动化环境搭建与浏览器配置
在开始编写自动化脚本之前,首先需要搭建完善的开发环境。本文采用Python作为核心开发语言,因其拥有丰富的生态库和简洁的语法结构。我们需要安装Selenium库以及用于自动管理浏览器驱动的 webdriver-manager 工具。通过包管理工具执行安装命令,可以确保依赖库的版本兼容性,避免因环境缺失导致脚本运行失败。
# 安装Selenium核心库 pip install selenium # 安装自动化驱动管理工具 pip install webdriver-manager
浏览器驱动的初始化是自动化流程的第一步。为了提升脚本的运行效率并减少系统资源占用,通常会配置Chrome浏览器的无头模式(Headless)。无头模式允许浏览器在后台静默运行,不渲染图形用户界面,这对于服务器环境下的数据采集任务尤为重要。同时,禁用GPU加速和设置合理的窗口大小也是优化浏览器启动速度的有效手段。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
# 配置Chrome浏览器选项
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
# 自定义User-Agent以规避基础反爬检测
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
chrome_options.add_argument(f'user-agent={user_agent}')
# 初始化浏览器驱动服务
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
在访问Google地图等具有严格反爬虫机制的网站时,默认的浏览器指纹极易被识别并拦截。因此,在配置浏览器选项时,必须自定义User-Agent字符串,模拟主流浏览器的真实请求头。此外,还可以通过添加额外的启动参数来禁用自动化控制提示条,使浏览器的行为特征更加贴近真实用户,从而降低被目标网站风控系统拦截的风险。
核心数据提取逻辑与DOM解析
Google地图的搜索结果页面采用了大量的异步加载和动态渲染技术,这意味着页面内容并非在初始HTML请求中一次性返回。如果使用固定的时间延迟如 time.sleep 来等待页面加载,往往会导致元素尚未渲染完成就开始提取,进而引发异常。因此,引入 WebDriverWait 显式等待机制是确保脚本稳定性的关键。通过设定特定的条件,让程序智能等待目标元素出现在DOM树中,再进行后续操作。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 访问Google地图搜索页面
target_url = "https://www.google.com/maps/search/咖啡店"
driver.get(target_url)
# 使用显式等待机制,确保商家卡片容器加载完成
wait = WebDriverWait(driver, 15)
card_locator = (By.XPATH, '//div[contains(@class, "Nv2PK")]')
wait.until(EC.presence_of_all_elements_located(card_locator))
# 获取所有商家卡片元素
shop_cards = driver.find_elements(By.XPATH, '//div[contains(@class, "Nv2PK")]')
print(f"成功定位到 {len(shop_cards)} 个商家卡片")
当页面加载完成后,下一步是精准定位商家卡片元素。Google地图的前端结构较为复杂,且类名通常会经过混淆或动态生成。通过浏览器的开发者工具深入分析DOM结构,我们可以发现商家信息通常被包裹在特定的 <div> 标签内。利用XPath表达式结合部分类名匹配,能够有效地筛选出所有可见的商家卡片节点,为后续的数据提取奠定基础。
在遍历每个商家卡片时,需要分别提取商家名称、评分以及评论数量。由于部分新开业或冷门的商家可能尚未产生评分和评论,对应的DOM元素可能不存在。因此,在提取过程中必须加入完善的异常处理机制。对于评论数量,页面显示的文本通常包含括号和千位分隔符,需要借助正则表达式提取出纯数字部分,确保最终存储的数据格式统一且便于后续的统计分析。
import re
extracted_data = []
for card in shop_cards:
try:
# 提取商家名称
name_elem = card.find_element(By.XPATH, './/div[@class="qBF1Pd"]//span')
shop_name = name_elem.text
# 提取评分,处理无评分的情况
rating_elems = card.find_elements(By.XPATH, './/span[contains(@class, "MW4etd")]')
rating = rating_elems[0].text if rating_elems else "暂无评分"
# 提取评论数,使用正则表达式过滤非数字字符
review_elems = card.find_elements(By.XPATH, './/span[contains(@class, "UY7F9")]')
if review_elems:
raw_text = review_elems[0].text.replace(',', '')
match = re.search(r'd+', raw_text)
review_count = match.group() if match else "0"
else:
review_count = "0"
extracted_data.append({
"name": shop_name,
"rating": rating,
"reviews": review_count
})
except Exception as e:
print(f"解析单个卡片时发生异常: {e}")
continue
数据持久化与工程化优化建议
提取到的结构化数据需要妥善保存,以便进行深度的商业分析。将数据导出为CSV格式是一种轻量且通用的选择。Python内置的 csv 模块提供了便捷的字典写入功能,能够自动处理表头和数据行的对齐问题。通过指定UTF-8编码,可以有效避免中文字符或特殊符号在写入文件时出现乱码,确保数据的完整性与可读性。
import csv
# 将提取的数据持久化到CSV文件中
file_path = 'google_maps_data.csv'
with open(file_path, mode='w', encoding='utf-8-sig', newline='') as csv_file:
fieldnames = ["name", "rating", "reviews"]
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(extracted_data)
print(f"数据已成功保存至 {file_path}")
在实际的业务场景中,目标区域的商家数量往往远超单页展示的极限。为了实现全量数据的采集,脚本必须具备处理分页或动态滚动加载的能力。对于Google地图的侧边栏结果列表,通常需要通过模拟鼠标滚轮事件或点击列表底部的加载更多按钮,触发新数据的异步请求。结合循环控制与显式等待,可以持续抓取直到列表底部或达到预设的数量阈值。
针对大规模的数据采集任务,工程化的优化策略不可或缺。频繁的单IP请求必然会导致IP被封禁,因此引入高质量的代理IP池并实现请求间的随机休眠是维持脚本长效运行的必要手段。同时,建立完善的日志记录机制,捕获运行过程中的网络超时、元素定位失败等异常信息,有助于在任务中断后快速排查问题并支持断点续传,从而提升整个数据采集系统的鲁棒性。
总结与要点回顾
综上所述,利用Selenium从Google地图提取商家评分与评论数是一项涉及环境配置、DOM解析、异常处理及数据持久化的综合性工程。通过合理运用显式等待、XPath定位以及正则表达式,我们可以构建出稳定高效的自动化采集脚本。在实际应用中,还需结合代理IP、动态滚动加载等进阶策略,以应对复杂的反爬虫机制与海量数据需求。掌握这些核心技术,将为本地生活服务的市场调研与竞品分析提供强大的数据获取能力,帮助企业在激烈的市场竞争中占据信息优势。
SeleniumGoogle_mapsPythonweb_scraping修改时间:2026-06-12 16:33:18