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

如何修改Selenium代码抓取谷歌地图全部90564条评论?

解决谷歌地图评论爬取不全的问题

你遇到的问题很典型——谷歌地图的评论是动态懒加载的,默认只加载前几条,剩下的需要滚动评论区才会逐步加载出来。你的代码只抓取了页面初始加载的9条,自然拿不到全部9万+评论。下面是修改后的完整方案:

核心思路

  1. 先切换到评论区标签,确保评论区完全展开
  2. 找到评论的滚动容器,循环滚动到底部,触发新评论加载
  3. 每次滚动后等待新评论加载完成,直到没有更多评论可加载

修改后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 目标谷歌地图商家页面
url = 'https://www.google.com/maps/place/ISKCON+temple+Bangalore/@13.0098328,77.5510964,15z/data=!4m7!3m6!1s0x0:0x7a7fb24a41a6b2b3!8m2!3d13.0098328!4d77.5510964!9m1!1b1'

driver = webdriver.Chrome()
driver.get(url)
driver.maximize_window()  # 最大化窗口,避免元素被遮挡
wait = WebDriverWait(driver, 20)

try:
    # 1. 点击评论标签,展开完整评论区(如果默认没显示的话)
    review_tab = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[@aria-label="评论"]')))
    review_tab.click()
    time.sleep(2)  # 给评论区展开留一点时间

    # 2. 找到评论的滚动容器(谷歌地图评论区的滚动div)
    scroll_container = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'DxyBCb')))
    
    # 3. 循环滚动加载评论,直到没有新评论出现
    previous_review_count = 0
    while True:
        # 抓取当前所有评论元素
        review_elements = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'wiI7pd')))
        current_review_count = len(review_elements)
        
        # 如果评论数量不再增加,说明已经加载完所有评论
        if current_review_count == previous_review_count:
            print(f"已加载全部评论,共 {current_review_count} 条")
            break
        
        print(f"当前已加载 {current_review_count} 条评论,继续加载...")
        previous_review_count = current_review_count
        
        # 滚动到评论容器底部,触发新评论加载
        driver.execute_script('arguments[0].scrollTop = arguments[0].scrollHeight', scroll_container)
        time.sleep(3)  # 等待新评论加载,可根据网络情况调整时间

    # 提取所有评论文本
    reviews = [element.text for element in review_elements]
    
    # 将评论保存到文件,方便后续处理
    with open('google_maps_reviews.txt', 'w', encoding='utf-8') as f:
        for idx, review in enumerate(reviews, 1):
            f.write(f"评论 {idx}:\n{review}\n{'='*50}\n")
            
    print("评论已成功保存到google_maps_reviews.txt")

finally:
    # 不管成功失败,都关闭浏览器
    driver.quit()

关键细节说明

  • 评论区切换:通过XPath定位评论标签按钮,确保我们进入了完整的评论列表页面
  • 滚动容器:谷歌地图的评论列表在一个独立的滚动div里,直接滚动这个容器比滚动整个页面更精准
  • 循环终止条件:通过比较滚动前后的评论数量,判断是否已经加载完所有评论,避免无限循环
  • 等待时间:time.sleep()的时长可以根据你的网络速度调整,网络好可以设短一点,网络差就设长一点,确保新评论能加载完成

注意:爬取大量评论时,谷歌地图可能会触发反爬机制(比如验证码、限制访问),建议适当增加等待时间,或者加入随机延迟,避免被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:25:17