如何抓取谷歌评论:分步指南

在本指南中,我将向您展示如何使用 Python 抓取 Google 评论,从而轻松地从 Google 地图列表中收集和分析数据。无论您是要跟踪客户情绪、发现趋势,还是简单地大规模收集评论,这种简单且可扩展的方法都能帮助您完成工作。因此,您将有一个清晰的流程来开始从 Google 评论中刮取和提取有用的数据,从而推动您的业务向前发展。

时间不够?以下是无需费力即可搜索 Google Reviews 的三大服务提供商:

  1. Bright Data: 行业领先者,拥有专用的 Google 地图 API、旋转代理和可自动处理反僵尸措施的刮擦浏览器。最具规模和可靠性。
  2. Oxylabs: 借助实时 SERP API 和广泛的代理网络,提供强大的搜索基础架构。非常适合企业级数据收集。
  3. ScraperAPI: 简单的应用程序接口,可为您处理代理、浏览器和验证码。适用于小型项目,预算低廉。

👇 想创建自己的刮板?请继续阅读完整的 Python 教程。

什么是网络抓取?

网页抓取是从网站中提取数据的过程。它包括检索网页内容并提取所需的信息。说到谷歌评论,网络搜索可以帮助企业收集关于其产品或服务的宝贵客户反馈。

这些数据可用于分析客户意见、确定改进领域或报告业务绩效。通过搜索谷歌评论,企业可以深入了解客户满意度,并利用这些信息改善整体客户体验,为业务增长做出明智决策。

为什么要抓取 Google 评论?

谷歌评论是一座信息金矿。它们为企业提供了来自客户的直接反馈,在多个方面都很有帮助:

  • 客户满意度:了解客户对企业的喜好和厌恶。
  • 竞争分析:比较竞争对手的评论,找出需要改进的地方。
  • 搜索引擎优化优势:正面评论可提高网站的搜索引擎排名。
  • 品牌监测:随时了解公众对您的品牌的看法。

与手动阅读单个评论相比,"抓取谷歌评论 "可帮助企业大规模获取这些见解,从而节省时间和精力。

搜索谷歌评论所需的工具

要抓取 Google Reviews,你需要以下工具:

  • 编程语言:Python 因其简单易用和强大的库而成为最受欢迎的网络搜索语言之一。
  • 库:在本教程中,我们将使用以下库 requestsBeautifulSoup和 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 等服务。这些服务提供旋转代理和浏览器自动化解决方案,让您可以在不被阻止的情况下进行数据抓取。

下面介绍如何使用代理服务绕过验证码:

  1. 注册:在 Bright Data 或 Oxylabs 上创建账户,并获取你的 API 密钥或代理凭据。
  2. 配置代理设置:使用旋转代理更改 IP 地址,避免被屏蔽。
  3. 与 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 选择器的快速参考表:

CSS 选择器参考

⚠️ 重要提示:Google 经常更改选择器

Google 会定期更新 CSS 类名和页面结构,通常不会发出警告。本教程中的选择器已在 2025 年 1 月进行了验证,但它们可能随时会被破坏。

如果您的铲运机突然停止工作,您需要

  1. 在浏览器中打开谷歌地图
  2. 右键单击要搜索的元素
  3. 选择 "检查 "打开 DevTools
  4. 查找新的类名并更新代码

对于生产用例,可考虑使用专业的搜索服务,如 Bright Data 或 Oxylabs.这些平台提供

  • 可自动处理选择器更改的预置 Google 地图 API
  • 轮流使用代理服务器,避免 IP 屏蔽和验证码
  • 具有内置反检测措施的扫描浏览器
  • 结构化数据输出,无需自行解析 HTML
  • 99% 的成功率,即使是在受到严格保护的地点

虽然自建刮板是一项很好的学习活动,但长期维护刮板可能需要投入大量时间。专业服务可以将这些挑战抽象化,让您专注于使用数据,而不是拼命收集数据。

最后的话

抓取 Google 评论是企业深入了解大规模客户反馈的重要工具。通过使用 Python 以及 Selenium 和 BeautifulSoup 等库,您可以轻松地从 Google 地图列表中抓取评论。将此过程扩展到多个列表,可以为您的分析提供更有价值的数据。

虽然从 Google 抓取数据也会遇到一些挑战,包括动态内容加载、无限滚动和反僵尸保护,但本指南中介绍的技术将帮助您克服这些挑战。对于更大规模的操作或生产系统,请考虑使用专业代理和抓取服务,以确保可靠性并避免阻塞。

有了本指南,您现在就可以搜索 Google 评论,并利用这些数据来提高企业业绩和客户满意度。

类似文章