使用Selenium抓取Google地图完整评论:解决“更多”内容展开问题


使用Selenium抓取Google地图完整评论:解决“更多”内容展开问题

本教程旨在解决使用selenium从google地图抓取评论时,因“更多”按钮导致评论内容不完整的问题。文章将详细指导如何通过selenium模拟用户行为,包括处理cookie弹窗、导航至评论区、滚动页面加载所有评论,以及动态点击每个评论中的“更多”按钮以展开完整文本,最终高效地提取所有评论数据。

引言:动态内容抓取的挑战

在进行网页数据抓取时,动态加载的内容常常是初学者面临的挑战。Google地图的评论页面就是一个典型例子:评论内容不仅通过滚动加载,而且长篇评论还会被截断,显示一个“更多”按钮。如果不点击这些“更多”按钮,我们只能获取到部分评论文本。本教程将介绍如何使用Selenium这一强大的自动化测试工具,模拟用户交互,克服这些障碍,从而抓取到完整的Google地图评论数据。

Selenium环境准备

首先,确保您的Python环境中已安装Selenium库和Chrome浏览器驱动。推荐使用webdriver-manager来自动管理驱动。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException, StaleElementReferenceException
from selenium.webdriver.common.keys import Keys
import time

# 定义目标URL
# 请根据实际需要替换为您的Google地图商家评论页URL
TARGET_URL = 'https://www.google.com/maps/place/Henn+na+Hotel+Tokyo+Asakusa+Tawaramachi/@35.7081692,139.7888494,17z/data=!4m22!1m12!3m11!1s0x60188f36ab21f05b:0x9241dab287ff62c9!2sHenn+na+Hotel+Tokyo+Asakusa+Tawaramachi!5m2!4m1!1i2!8m2!3d35.7081692!4d139.7914243!9m1!1b1!16s%2Fg%2F11h0gzlhht!3m8!1s0x60188f36ab21f05b:0x9241dab287ff62c9!5m2!4m1!1i2!8m2!3d35.7081692!4d139.7914243!16s%2Fg%2F11h0gzlhht?entry=ttu'

# 配置Chrome选项
options = Options()
options.add_argument('--no-sandbox') # 禁用沙盒模式,在某些Linux环境下可能需要
options.add_argument('--disable-dev-shm-usage') # 禁用/dev/shm使用,在某些Docker/Linux环境下可能需要
# options.add_argument('--headless') # 启用无头模式,不显示浏览器界面,适合服务器环境

# 初始化WebDriver
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)
driver.get(TARGET_URL)

# 等待页面加载完成,例如等待H1标题出现
try:
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, 'h1')))
    print("页面H1标题已加载。")
except TimeoutException:
    print("页面H1标题未在指定时间内加载。")

步骤一:处理Cookie同意弹窗

许多网站在首次访问时会显示Cookie同意弹窗。我们需要模拟点击“接受”按钮以继续。

def accept_cookie_policy():
    """尝试点击Cookie政策接受按钮"""
    try:
        # 查找所有按钮,并根据文本内容判断是否为“Accept all”
        buttons = driver.find_elements(By.TAG_NAME, 'button')
        for button in buttons:
            if button.text == "Accept all":
                print("找到并点击 'Accept all' Cookie按钮。")
                button.click()
                time.sleep(2) # 等待弹窗消失
                return
    except (TimeoutException, NoSuchElementException):
        print("Cookie政策按钮未找到或无法点击。")

accept_cookie_policy()

步骤二:导航至评论区

在某些Google地图页面布局中,评论可能不是默认显示的,需要点击“评论”标签页。

芦笋演示 芦笋演示

一键出成片的录屏演示软件,专为制作产品演示、教学课程和使用教程而设计。

芦笋演示 227 查看详情 芦笋演示
# 查找并点击“评论”按钮
try:
    all_buttons = driver.find_elements(By.TAG_NAME, 'button')
    for button in all_buttons:
        if button.text == 'Reviews': # 根据页面语言,可能是“评论”
            print("找到并点击 'Reviews' 按钮。")
            button.click()
            time.sleep(3) # 等待评论区加载
            break
except NoSuchElementException:
    print("未找到 'Reviews' 按钮。")

步骤三:滚动加载所有评论容器

Google地图的评论是动态加载的,只有滚动到页面底部,新的评论才会显示。我们需要找到评论区的滚动条,并模拟持续滚动直到所有评论加载完毕。

# 找到评论区的可滚动面板
# 经验证,该XPath通常指向包含评论的滚动容器
SCROLLABLE_REVIEWS_PANEL_XPATH = "//div[contains(@class, 'm6QErb') and contains(@class, 'DxyBCb') and contains(@class, 'kA9KIf') and contains(@class, 'dS8AEf')]"
try:
    scrollable_reviews_panel = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, SCROLLABLE_REVIEWS_PANEL_XPATH))
    )
    print("找到评论滚动面板。")
except TimeoutException:
    print("未在指定时间内找到评论滚动面板。请检查XPath。")
    driver.quit()
    exit()

last_height = driver.execute_script("return arguments[0].scrollHeight", scrollable_reviews_panel)
print("开始滚动加载所有评论...")
while True:
    # 滚动到评论面板的底部
    driver.execute_script("arguments[0].scrollTo(0, arguments[0].scrollHeight);", scrollable_reviews_panel)
    time.sleep(2) # 等待新评论加载
    new_height = driver.execute_script("return arguments[0].scrollHeight", scrollable_reviews_panel)
    if new_height == last_height:
        # 如果滚动高度不再变化,说明已加载所有评论
        print("所有评论已加载。")
        break
    last_height = new_height

步骤四:展开所有“更多”评论内容

一旦所有评论容器加载完毕,下一步就是遍历每个评论,查找并点击其中的“更多”按钮,以显示完整的评论文本。

# 展开所有“更多”按钮
print("开始展开所有 '更多' 评论...")
# 'jftiEf' 通常是单个评论卡片的类名
review_containers = driver.find_elements(By.CLASS_NAME, 'jftiEf')
for i, container in enumerate(review_containers):
    try:
        # 'w8nwRe' 通常是“更多”按钮的类名
        more_button = container.find_element(By.CLASS_NAME, "w8nwRe")
        if more_button.text == "More": # 确保是“More”按钮
            more_button.click()
            time.sleep(0.5) # 短暂延迟,等待评论展开
            # print(f"已展开第 {i+1} 条评论的 '更多' 内容。")
    except NoSuchElementException:
        # 当前评论没有“更多”按钮,跳过
        pass
    except StaleElementReferenceException:

以上就是使用Selenium抓取Google地图完整评论:解决“更多”内容展开问题的详细内容,更多请关注其它相关文章!


# 未找到  # seo3的  # 百度关键词排名倾向  # 店铺营销与推广招聘信息  # 仁怀网站seo优化公司  # 市辖区高端网站建设工作  # 故宫建设的网站  # 岳阳网站建设和推广公司  # 专业做网站建设昆山  # SEO管理书籍摘抄感悟  # 舟山营销推广工作室  # 还会  # 才会  # 如何在  # 首次  # 这一  # linux  # 在某些  # 时间内  # 您的  # 加载  # webdriver  # google  # ai  # mac  # 工具  # 浏览器  # cookie  # docker  # go  # python 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Python高效统计字典嵌套列表值在目标列表中的出现次数  毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明  天堂漫画网页版在线阅读 天堂漫画手机版入口  小米手机屏幕失灵乱跳怎么办 屏幕触控问题自检与临时解决方法【应急】  淘口令快速解析技巧  C#解析来自网络的XML流数据 实时错误处理与重试机制  《下一站江湖2》心法融合技巧  手机坏了微信聊天记录怎么导出来 新手机恢复聊天记录技巧  Yandex浏览器官方入口_Yandex搜索引擎中文版  win11资源管理器标签页怎么用 Win11文件管理器多标签高效操作【新功能】  Python csv 模块处理非字符串数据:列表写入 CSV 文件的机制解析  圆通快递包裹轨迹查询 圆通速递快件实时位置跟踪  《随手记》备份数据方法  qq音乐官方网站入口_qq音乐在线听歌网页版链接  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  Win10共享文件夹设置方法 Win10局域网文件共享全攻略【教程】  火柴人战争网页版在线玩  重返未来:1999卡戎全方位攻略  《淘宝联盟》推广自己的店铺方法  基于键值条件高效映射 Pandas DataFrame 多列数据  4399造梦西游3无敌版_4399游戏入口  PHP utf8_encode 字符编码转换疑难解析与最佳实践  宝妈做视频号该写什么标签话题?宝妈关注的话题有哪些?  蛙漫2(台版)正版官网 2025免费网页版分享  实现可重用自定义Python Range类  国际经济与贸易就业方向解析  优化2xN网格最大路径和的动态规划算法实践  Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置  PSD转AI文件的简单方法  React应用中Commerce.js数据加载与状态管理最佳实践  MacBook Pro词典使用指南  5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备  oppo手机如何通过下拉通知栏截图_oppo手机通知栏快捷截图方法  J*aScript调试技巧_性能分析与内存快照  cad怎么隐藏指定的图层_cad隐藏或冻结图层方法  《环球网校》设置报考省市方法  抖音号已注销怎么解绑企业认证?不解绑企业认证会怎样?  美发店速赢秘籍  鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】  c++如何使用std::thread::join和detach_c++线程生命周期管理  word页码灰色不能用如何解决  酷狗音乐多音轨设置教程  使用document.execCommand实现Web文本编辑器加粗/取消加粗  作业帮网页版不用下载入口 在线问老师快速答疑  钉钉任务无法提醒如何处理 钉钉任务提醒优化方法  抖音号怎么解除企业认证改成个人?改成个人有影响吗?  J*a里如何处理ArithmeticException并防止除零_算术异常防护策略解析  edge浏览器怎么修改语言为中文_Edge界面语言切换教程  虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画  抖音视频如何添加标题?添加标题有哪些好处? 

 2025-12-06

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.