You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Selenium滚动Google Maps评论面板实现全量评论抓取?

解决Google Maps评论面板滚动加载更多评论的问题

我之前也踩过Google Maps评论抓取的坑,普通的window.scrollBy()之所以对你没用,核心原因是Google Maps的评论列表是放在独立的滚动容器里的,不是整个页面的body在滚动,所以全局滚动根本触不到它的加载逻辑。

你后来找到的方向是对的,必须定位到评论容器元素,再对它执行滚动操作。我把你的方案整理优化了一下,让代码更清晰易读:

完整可运行的代码

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
import time

# 配置Chrome驱动
PATH = "chromedriver.exe"
options = webdriver.ChromeOptions()
options.add_argument("--disable-gpu")
options.add_argument('enable-logging')
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=options, executable_path=PATH)
# 隐藏webdriver特征,规避反爬
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
driver.execute_cdp_cmd('Network.setUserAgentOverride', {
    "userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'
})

# 目标博物馆页面
url = 'https://www.google.com/maps/place/Mus%C3%A9e+Gr%C3%A9vin/@48.8718378,2.3400264,17z/data=!3m1!4b1!4m5!3m4!1s0x47e66e3e9be04a55:0x7def1a3ff98df458!8m2!3d48.8718157!4d2.3422113'
driver.get(url)

# 点击展开评论区域
driver.find_element_by_xpath('//*[@id="QA0Szd"]/div/div/div[1]/div[2]/div/div[1]/div/div/div[2]/div[1]/div[1]/div[2]/div/div[1]/span[1]/span/span/span[2]/span[1]/button').click()
time.sleep(3)  # 等待评论区域加载

SCROLL_PAUSE_TIME = 5
# 定位评论容器(核心:必须找到这个独立的滚动容器)
review_container = driver.find_element_by_xpath('//*[@id="QA0Szd"]/div/div/div[1]/div[2]/div/div[1]/div/div/div[2]')
last_height = driver.execute_script("return arguments[0].scrollHeight", review_container)

# 循环滚动加载所有评论
while True:
    # 对评论容器执行滚动,一次性滚5000像素足够触发加载
    driver.execute_script('arguments[0].scrollBy(0, 5000);', review_container)
    # 等待新评论加载完成
    time.sleep(SCROLL_PAUSE_TIME)
    
    # 获取容器新的滚动高度
    new_height = driver.execute_script("return arguments[0].scrollHeight", review_container)
    
    # 如果高度不再变化,说明没有更多评论了
    if new_height == last_height:
        break
    last_height = new_height

# 解析页面抓取所有评论
soup = BeautifulSoup(driver.page_source, 'html.parser')
review_list = []
reviews = soup.find_all('span', class_='wiI7pd')
for container in reviews:
    rev = container.text.strip()
    review_list.append(rev)

# 保存到CSV文件
data = pd.DataFrame({'reviews': review_list})
data.to_csv("test_map.csv", sep=';', index=False, encoding='utf-8-sig')

# 关闭浏览器
driver.quit()

几个关键注意点

  • 锁定滚动容器:Google Maps的评论列表不是依附于页面body滚动的,而是在自己的<div>容器里,所有滚动操作必须针对这个容器执行,这是解决问题的核心。
  • 滚动高度判断终止循环:通过对比容器的scrollHeight来判断是否加载完毕,当新旧高度一致时,说明没有更多评论可以加载了,避免无限循环。
  • 反爬细节:你已经做了隐藏webdriver和UA模拟,这部分很重要,可以降低被Google反爬机制拦截的概率。
  • 等待时间调整:SCROLL_PAUSE_TIME可以根据你的网络情况调整,如果网络好可以适当缩短,避免不必要的等待。

内容的提问来源于stack exchange,提问作者FalconBob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 01:57:27