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

如何用Selenium的find_elements获取innerHTML,解决谷歌地图爬取价格重复问题

谷歌地图爬取价格文本的问题解决

核心问题分析

循环输出值始终相同的核心原因是使用绝对XPath而非相对路径,导致每次循环都定位到页面同一个元素;另外find_elements返回元素列表,不能直接调用.text方法。要实现批量获取价格文本,需基于每个entry节点做相对定位,再通过find_elements遍历提取innerHTML。

代码修正及说明

关键问题修正

  1. 绝对XPath改相对路径:所有基于entry的元素查找,XPath需以.开头,表示从当前entry节点开始搜索,而非整个页面根节点。
  2. find_elements正确用法:find_elements返回元素列表,需遍历或通过索引获取单个元素后,再调用.get_attribute('innerHTML')或.text。
  3. 补充价格提取逻辑:新增价格元素的定位代码,确保循环中每个entry对应自身的价格数据。

修正后的代码

# 从结果中提取信息
for entry in entries:
    # 提取名称
    name = entry.get_attribute("aria-label")
    
    # 提取地址(使用相对XPath,避免绝对路径的固定定位)
    adress = entry.find_element(By.XPATH, './/div[contains(@class, "W4Efsd") and position()=3]')
    adress_get = adress.get_attribute('innerHTML')
    
    # 提取电话(处理find_elements返回的列表)
    phone_elements = entry.find_elements(By.CLASS_NAME, 'xwpmRb.qisNDe')
    phone = phone_elements[0].text if phone_elements else "无电话信息"
    
    # 提取网站
    try:
        webcontainer = entry.find_element(By.CLASS_NAME, 'W4Efsd')
        website = webcontainer.get_attribute('innerHTML')
    except NoSuchElementException:
        website = "未找到网站"
    
    # 提取价格文本(替换成你实际找到的价格元素class或定位规则)
    price_elements = entry.find_elements(By.CLASS_NAME, 'your-price-class')
    price = price_elements[0].get_attribute('innerHTML') if price_elements else "无价格信息"
    
    # 输出当前条目信息
    print(name)
    print(adress_get)
    print(phone)
    print(website)
    print(price)

注意事项

  • 元素定位稳定性:谷歌地图页面元素的class、XPath经常变动,建议用contains()匹配部分class属性,避免依赖固定id或绝对路径。
  • 空值处理:对find_elements返回的列表必须做非空判断,防止索引越界报错。
  • 数据存储优化:如果需要保存多条数据,建议在循环外初始化列表,循环内将每个条目的信息存入列表,避免每次循环重置数据结构。

内容的提问来源于stack exchange,提问作者what.a.disaster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:25:21