如何抓取谷歌评论:分步指南
在本指南中,我将向您展示如何使用 Python 抓取 Google 评论,从而轻松地从 Google 地图列表中收集和分析数据。无论您是要跟踪客户情绪、发现趋势,还是简单地大规模收集评论,这种简单且可扩展的方法都能帮助您完成工作。因此,您将有一个清晰的流程来开始从 Google 评论中刮取和提取有用的数据,从而推动您的业务向前发展。
时间不够?以下是无需费力即可搜索 Google Reviews 的三大服务提供商:
- Bright Data: 行业领先者,拥有专用的 Google 地图 API、旋转代理和可自动处理反僵尸措施的刮擦浏览器。最具规模和可靠性。
- Oxylabs: 借助实时 SERP API 和广泛的代理网络,提供强大的搜索基础架构。非常适合企业级数据收集。
- ScraperAPI: 简单的应用程序接口,可为您处理代理、浏览器和验证码。适用于小型项目,预算低廉。
👇 想创建自己的刮板?请继续阅读完整的 Python 教程。
什么是网络抓取?
网页抓取是从网站中提取数据的过程。它包括检索网页内容并提取所需的信息。说到谷歌评论,网络搜索可以帮助企业收集关于其产品或服务的宝贵客户反馈。
这些数据可用于分析客户意见、确定改进领域或报告业务绩效。通过搜索谷歌评论,企业可以深入了解客户满意度,并利用这些信息改善整体客户体验,为业务增长做出明智决策。
为什么要抓取 Google 评论?
谷歌评论是一座信息金矿。它们为企业提供了来自客户的直接反馈,在多个方面都很有帮助:
- 客户满意度:了解客户对企业的喜好和厌恶。
- 竞争分析:比较竞争对手的评论,找出需要改进的地方。
- 搜索引擎优化优势:正面评论可提高网站的搜索引擎排名。
- 品牌监测:随时了解公众对您的品牌的看法。
与手动阅读单个评论相比,"抓取谷歌评论 "可帮助企业大规模获取这些见解,从而节省时间和精力。
搜索谷歌评论所需的工具
要抓取 Google Reviews,你需要以下工具:
- 编程语言:Python 因其简单易用和强大的库而成为最受欢迎的网络搜索语言之一。
- 库:在本教程中,我们将使用以下库
requests,BeautifulSoup和Selenium用于抓取。BeautifulSoup 有助于解析网页的 HTML 内容,而 Selenium 则可以处理像 Google Maps 这样高度依赖 JavaScript 的网站。 - 代理服务:谷歌有严格的措施来阻止刮擦。为避免被屏蔽,您需要使用 Bright Data 或 Oxylabs 等代理服务来轮换 IP 地址。
- 浏览器自动化工具:有些页面需要交互(如点击按钮或滚动)。Selenium 可以自动执行这些操作。
如何从单个列表中抓取 Google 评论
第一步是从单个谷歌地图列表页面抓取评论。谷歌地图提供了大量数据,包括客户评论、星级评分和评论者详细信息。
步骤 1:设置 Python 环境
要开始学习,请确保系统中已安装 Python。您可以运行以下命令安装必要的库:
pip install requests
pip install beautifulsoup4
pip install selenium
步骤 2:确定 Google 评论页面
Google 地图企业列表的 URL 通常如下所示:
https://www.google.com/maps/place/{business_name}/@latitude,longitude
访问企业的 Google 地图页面并复制 URL。
第 3 步:使用 Selenium 打开 Google 地图列表
Google 地图需要 JavaScript 渲染才能显示评论,因此我们将使用 Selenium 来模拟浏览器交互。下面是一个简单的 Selenium 脚本,打开 Google 地图列表并点击评论选项卡。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time
# 设置 Selenium WebDriver(Selenium 4 自动管理 ChromeDriver)
chrome_options = 选项()
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.google.com/maps/place/The 曼哈顿时代广场酒店")
# Wait for the page to load
time.sleep(5)
# 使用灵活的选择器点击评论选项卡
reviews_tab = driver.find_element(By.XPATH、 "//按钮[包含(@aria-标签,'评论')]")
reviews_tab.click()
# 等待加载评论
time.sleep(3)
步骤 4:滚动加载所有评论
Google 地图使用特定面板内的无限滚动来加载评论,而不是窗口主体。要抓取所有评论,您需要在评论容器内模拟滚动。
# 找到可滚动的评论面板
scrollable_div = driver.find_element(By.CSS_SELECTOR、 ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde")
# 在面板内滚动以载入所有评论
for _ in range(10): # 调整范围以增加滚动次数
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
time.sleep(2)
步骤 5:提取审查数据
加载评论后,您可以使用 BeautifulSoup 解析页面并提取评论详情。下面是一个如何提取评论文本、评论者姓名、评分和日期的示例:
from bs4 import BeautifulSoup
# 滚动后获取页面源代码
html = driver.page_source
# 使用 BeautifulSoup 解析页面
soup = BeautifulSoup(html、 "html.parser")
# 查找所有评论容器
reviews = soup.find_all("div", class_="jftiEf")
# 从每次审查中提取相关数据
review_data = []
for 审查 in 评论:
# 审查员姓名
name_elem = review.find("div", class_="d4r55")
reviewer_name = name_elem.text.strip() if 代号 else "无名"
# 审查文本
text_elem = review.find("span", class_="wiI7pd")
review_text = text_elem.text.strip() if 文本标志 else "无审查文本"
# 评级(满星数)
rating_container = review.find("span", class_="hCCjke")
if rating_container:
filled_stars = rating_container.find_all("span", class_="NhBTye")
评级 = len(满天星)
else:
评级 = 0
# 审查日期
date_elem = review.find("span", class_="rsqaWe")
review_date = date_elem.text.strip() if 日期标识 else "无日期"
review_data.append({
"审查员": 评审员姓名、
"审查文本": review_text、
"评级"评级、
"审查日期": 审查日期
})
print(审查数据)
步骤 6:处理 "更多 "按钮,查看长评论
某些评论可能会被 "更多 "按钮截断,隐藏部分评论内容。您可以使用 Selenium 自动点击该按钮:
# 点击 "更多 "查看评论全文
more_buttons = driver.find_elements(By.CSS_SELECTOR.Find_Elements) ".w8nwRe.kyuRq")
for 按钮 in 更多按钮:
try:
button.click()
time.sleep(0.5)
except:
pass # 按钮可能无法点击或不可见
步骤 7:保存数据
提取数据后,可以将其保存为 CSV、JSON 或数据库。在本例中,我们将把数据保存到 JSON 文件中。
import json
with open("reviews.json", "w", encoding="utf-8") as 文件:
json.dump(review_data, file, indent=4, ensure_ascii=False)
将搜索过程扩展到多个列表
现在,您已经学会了如何刮取单个列表,是时候将这一过程扩展到多个企业列表了。
步骤 1:提取多个 URL
Google 地图搜索页面提供单个企业列表的链接。要从多个列表中抓取评论,首先要从搜索页面中提取企业的 URL。
def 提取列表(search_url):
driver.get(search_url)
time.sleep(5)
# 查找可滚动的搜索结果面板
try:
scrollable_div = driver.find_element(By.CSS_SELECTOR.Drawable_div)( ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde.ecceSd")
for _ in range(5):
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
time.sleep(2)
except Exception as e:
print(f "滚动错误: {e}")
# 提取列表的 URL
listing_elements = driver.find_elements(By.CSS_SELECTOR.List_elements) "a.hfpxzc")
urls = [element.get_attribute("href") for element in listing_elements]
return urls
listing_urls = extract_listing_urls("纽约 https://www.google.com/maps/search/hotels")
print(listing_urls)
第 2 步:从每个列表中抓取评论
有了列表 URL 后,就可以对每个 URL 进行迭代,并使用与单个列表相同的方法搜索评论。
所有评论 = []
for url in listing_urls:
reviews = scrape_reviews(url)
all_reviews.append({
"url": url、
"评论"审查
})
# 将所有评论保存到 JSON 文件中
with open("all_reviews.json"(所有评论)。, "w", encoding="utf-8") as 文件:
json.dump(all_reviews, file, indent=4, ensure_ascii=False)
处理验证码和反窃听措施
Google 使用验证码和其他反机器人措施来防止刮擦。要绕过这些限制,您可以使用 Bright Data 或 Oxylabs 等服务。这些服务提供旋转代理和浏览器自动化解决方案,让您可以在不被阻止的情况下进行数据抓取。
下面介绍如何使用代理服务绕过验证码:
- 注册:在 Bright Data 或 Oxylabs 上创建账户,并获取你的 API 密钥或代理凭据。
- 配置代理设置:使用旋转代理更改 IP 地址,避免被屏蔽。
- 与 Selenium 集成:在 Selenium 中配置代理,让请求通过该服务转发。
from selenium.webdriver.chrome.options import 选项
chrome_options = Options()
# 代理配置示例
proxy = "http://username:password@proxy-server:port"
chrome_options.add_argument(f'--proxy-server={proxy}')
驱动程序 = webdriver.Chrome(options=chrome_options)
完整的工作脚本
下面是综合上述所有步骤的完整脚本:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import json
import time
def 设置驱动程序():
""设置并返回 Selenium WebDriver""
chrome_options = Options()
# chrome_options.add_argument("--headless") # 取消无头模式的注释
驱动程序 = webdriver.Chrome(options=chrome_options)
return driver
def 搜索评论(驱动程序、url):
""从单个 Google 地图列表中抓取评论"""
driver.get(url)
time.sleep(5)
# 点击 "评论 "选项卡
try:
reviews_tab = driver.find_element(By.XPATH、 "//按钮[包含(@aria-标签,'评论')]")
reviews_tab.click()
time.sleep(3)
except Exception as e:
print(f "无法点击 "评论 "选项卡: {e}")
return []
# 在评论面板内滚动以载入更多评论
try:
scrollable_div = driver.find_element(By.CSS_SELECTOR.Drawable_div)( ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde")
for _ in range(10):
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
time.sleep(2)
except Exception as e:
print(f "滚动错误: {e}")
# 点击所有 "更多 "按钮展开截断评论
more_buttons = driver.find_elements(By.CSS_SELECTOR.Find_Elements) ".w8nwRe.kyuRq")
for 按钮 in 更多按钮:
try:
button.click()
time.sleep(0.5)
except:
pass
# 使用 BeautifulSoup 解析页面
html = driver.page_source
soup = BeautifulSoup(html、 "html.parser")
# 查找所有评论容器
reviews = soup.find_all("div", class_="jftiEf")
review_data = []
for 审查 in 评论:
# 审查员姓名
name_elem = review.find("div", class_="d4r55")
reviewer_name = name_elem.text.strip() if 代号 else "无名"
# 审查文本
text_elem = review.find("span", class_="wiI7pd")
review_text = text_elem.text.strip() if 文本标志 else "无审查文本"
# 评级(满星数)
rating_container = review.find("span", class_="hCCjke")
if rating_container:
filled_stars = rating_container.find_all("span", class_="NhBTye")
评级 = len(满天星)
else:
评级 = 0
# 审查日期
date_elem = review.find("span", class_="rsqaWe")
review_date = date_elem.text.strip() if 日期标识 else "无日期"
review_data.append({
"审查员": 评审员姓名、
"审查文本": review_text、
"评级"评级、
"审查日期": 审查日期
})
return 审查数据
def 提取列表(驱动程序, search_url):
""从 Google 地图搜索页面中提取列表 URL""
driver.get(search_url)
time.sleep(5)
# 滚动以加载更多列表
try:
scrollable_div = driver.find_element(By.CSS_SELECTOR.Drawable_div)( ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde.ecceSd")
for _ in range(5):
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
time.sleep(2)
except Exception as e:
print(f "滚动错误: {e}")
# 提取列表 URL
listing_elements = driver.find_elements(By.CSS_SELECTOR.List_elements) "a.hfpxzc")
urls = [element.get_attribute("href") for element in listing_elements]
return urls
# 主要执行
if __name__ == "__main__":
驱动程序 = setup_driver()
try:
# 单列示例
single_url = "https://www.google.com/maps/place/The 曼哈顿时代广场酒店"
reviews = scrape_reviews(driver, single_url)
print(f "Scraped {len(评论) } 来自单个列表的评论")
# 保存单个列表评论
with open("single_reviews.json"(单篇评论)。, "w", encoding="utf-8") as 文件:
json.dump(reviews, file, indent=4, ensure_ascii=False)
# 多重列名示例
search_url = "纽约 https://www.google.com/maps/search/hotels"
listing_urls = extract_listing_urls(driver, search_url)
print(发现 {len(listing_urls)} 上市")
all_reviews = []
for url in listing_urls[:5]: # 仅限前 5 位演示者
reviews = scrape_reviews(driver, url)
all_reviews.append({
"url": url、
"评论"审查
})
print(f "Scraped {len(评论) } 评论来自 {url[:50]}...")
# 将所有评论保存为 JSON 格式
with open("all_reviews.json"(所有评论)。, "w", encoding="utf-8") as 文件:
json.dump(all_reviews, file, indent=4, ensure_ascii=False)
print("所有评论都保存在 all_reviews.json 中")
finally:
driver.quit()
CSS 选择器参考
下面是本教程中使用的 CSS 选择器的快速参考表:

⚠️ 重要提示:Google 经常更改选择器
Google 会定期更新 CSS 类名和页面结构,通常不会发出警告。本教程中的选择器已在 2025 年 1 月进行了验证,但它们可能随时会被破坏。
如果您的铲运机突然停止工作,您需要
- 在浏览器中打开谷歌地图
- 右键单击要搜索的元素
- 选择 "检查 "打开 DevTools
- 查找新的类名并更新代码
对于生产用例,可考虑使用专业的搜索服务,如 Bright Data 或 Oxylabs.这些平台提供
- 可自动处理选择器更改的预置 Google 地图 API
- 轮流使用代理服务器,避免 IP 屏蔽和验证码
- 具有内置反检测措施的扫描浏览器
- 结构化数据输出,无需自行解析 HTML
- 99% 的成功率,即使是在受到严格保护的地点
虽然自建刮板是一项很好的学习活动,但长期维护刮板可能需要投入大量时间。专业服务可以将这些挑战抽象化,让您专注于使用数据,而不是拼命收集数据。
最后的话
抓取 Google 评论是企业深入了解大规模客户反馈的重要工具。通过使用 Python 以及 Selenium 和 BeautifulSoup 等库,您可以轻松地从 Google 地图列表中抓取评论。将此过程扩展到多个列表,可以为您的分析提供更有价值的数据。
虽然从 Google 抓取数据也会遇到一些挑战,包括动态内容加载、无限滚动和反僵尸保护,但本指南中介绍的技术将帮助您克服这些挑战。对于更大规模的操作或生产系统,请考虑使用专业代理和抓取服务,以确保可靠性并避免阻塞。
有了本指南,您现在就可以搜索 Google 评论,并利用这些数据来提高企业业绩和客户满意度。

