求助:Selenium爬取谷歌地图评论仅获前8条,滚动加载失效
解决谷歌地图评论爬取仅获取前8条的问题
问题原因
你当前代码滚动整个页面的body元素,但谷歌地图的评论列表是放在独立的滚动容器里的,滚动body根本触不到评论区的加载逻辑,所以只能拿到初始加载的8条评论。
解决方案
定位到评论区的专属滚动容器,直接对这个容器执行滚动操作,同时用更可靠的JavaScript滚动替代send_keys,避免元素焦点问题。
修改后的完整代码
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 url = 'https://www.google.com/maps/place/FRUYO+MALAYSIA/@2.2916032,111.8210233,17z/data=!4m8!3m7!1s0x31f77f4fb024a7e1:0x468c52dc9e9179c3!8m2!3d2.2916032!4d111.8210233!9m1!1b1!16s%2Fg%2F11p65htbhd?entry=ttu' driver = webdriver.Chrome() driver.get(url) wait = WebDriverWait(driver, 20) # 等待评论滚动容器加载完成 # 定位评论区的滚动容器,谷歌地图的这个容器class可能会微调,可根据实际页面调整 review_container = wait.until(EC.presence_of_element_located( (By.XPATH, '//div[@class="m6QErb DxyBCb kA9KIf dS8AEf"]//div[@role="feed"]') )) num_reviews = len(driver.find_elements(By.CLASS_NAME, 'wiI7pd')) scroll_attempts = 0 # 防止无限滚动,设置尝试次数上限 max_attempts = 10 while scroll_attempts < max_attempts: # 用JavaScript滚动容器到底部,比send_keys更可靠 driver.execute_script('arguments[0].scrollTop = arguments[0].scrollHeight', review_container) time.sleep(2) # 根据网络情况调整等待时间 new_num_reviews = len(driver.find_elements(By.CLASS_NAME, 'wiI7pd')) if new_num_reviews == num_reviews: scroll_attempts += 1 else: num_reviews = new_num_reviews scroll_attempts = 0 # 加载到新评论,重置尝试次数 # 提取所有评论 review_elements = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'wiI7pd'))) reviews = [elem.text for elem in review_elements] print(f"共获取到{len(reviews)}条评论") for idx, review in enumerate(reviews, 1): print(f"\n第{idx}条评论:\n{review}") driver.quit()
关键修改说明
- 定位滚动容器:通过XPath定位到评论区的
feed容器,这才是实际承载评论列表的滚动元素 - 改用JavaScript滚动:
execute_script直接操作容器的scrollTop属性,避免send_keys可能遇到的焦点丢失、元素不可交互问题 - 增加滚动重试机制:设置最大滚动尝试次数,防止因网络延迟导致的误判,确保尽可能加载更多评论
内容的提问来源于stack exchange,提问作者weizer
相关产品推荐
相关产品推荐

