使用Python+Selenium爬取Google Maps仅获前6条结果如何解决
问题原因与修复方案
问题定位
你定位结果区块使用的类名lI9IFe没有错误,该类确实是谷歌地图搜索结果条目的通用绑定类。
只能提取到前6条的核心原因是谷歌地图搜索结果采用懒加载机制:默认仅渲染当前可视区域内的条目,剩余14条需要滚动结果列表到底部才会逐步加载到DOM树中,未加载的条目无法通过find_elements获取。
核心修复逻辑
在每次提取当前页数据前,先触发结果容器滚动,加载完全部20条条目后再执行提取操作,核心代码如下:
# 放在while循环内部,提取entries之前执行 # 定位结果滚动容器 scroll_container = driver.find_element(By.CSS_SELECTOR, 'div[role="main"] div.m6QErb.DxyBCb.kA9KIf.dS8AEf') # 滚动触发懒加载,直到容器高度不再变化(全部条目加载完成) last_height = driver.execute_script("return arguments[0].scrollHeight", scroll_container) while True: driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container) time.sleep(2) new_height = driver.execute_script("return arguments[0].scrollHeight", scroll_container) if new_height == last_height: break last_height = new_height # 此时再获取条目即可拿到完整20条 entries = driver.find_elements(By.CLASS_NAME,'lI9IFe')
额外优化建议
- 你当前使用的翻页按钮ID
ppdPk-Ej1Yeb-LgbsSe-tJiF1e是动态生成的,随时可能失效,建议改为通过属性定位:driver.find_element(By.CSS_SELECTOR, 'button[aria-label="下一页"]'),同时增加异常捕获,当找不到下一页按钮时退出循环,避免脚本崩溃。 - 注释掉的地址、电话提取逻辑使用了绝对XPATH,稳定性极差,建议改为基于当前entry的相对选择器提取。
- Excel读写操作可以放到循环外执行,无需每次翻页都重复打开保存文件,减少IO开销提升效率。
- 尽量用Selenium显式等待替换硬编码的
time.sleep(),可大幅提升脚本在不同网络环境下的稳定性。
内容的提问来源于stack exchange,提问作者lucas mesnil
相关产品推荐
相关产品推荐

