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

如何用Python Selenium抓取网页全部评论?现有代码仅获第一条

解决TripAdvisor评论抓取仅获取第一条的问题

核心问题

你代码里用了driver.find_element()方法,这个方法只会返回匹配到的第一个元素,哪怕XPath能匹配多个元素。要获取全部评论,必须用**driver.find_elements()**(复数形式),它会返回所有符合条件的元素列表。

修改后的完整代码

import time
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

url = "https://www.tripadvisor.com/Attraction_Review-g262047-d568915-Reviews-Spiaggia_dei_Conigli-Lampedusa_Islands_of_Sicily_Sicily.html"

driver = webdriver.Firefox()

driver.get(url)

# 处理Cookie弹窗
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, 'onetrust-accept-btn-handler'))).click()

# 点击进入评论区,用显式等待替代sleep
reviews_tab = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.XPATH, '//a[@href="#REVIEWS"]/div/span'))
)
reviews_tab.click()

# 等待评论加载完成,用显式等待确保所有评论元素出现
WebDriverWait(driver, 20).until(
    EC.presence_of_all_elements_located((By.XPATH, '//div[@data-automation="reviewCard"]//div[contains(@class, "reviewText")]/span'))
)

# 使用find_elements获取所有评论元素
review_list = driver.find_elements(By.XPATH, '//div[@data-automation="reviewCard"]//div[contains(@class, "reviewText")]/span')

# 遍历打印所有评论
for idx, review in enumerate(review_list, 1):
    print(f"评论 {idx}:\n{review.text}\n")

driver.quit()

关键优化点

  • 替换find_element为find_elements:这是解决仅获取第一条评论的核心,复数方法会返回所有匹配元素的列表。
  • 用显式等待替代硬编码time.sleep:固定时长的sleep容易因页面加载慢导致元素未就绪,显式等待会等到元素满足条件再执行,稳定性更强。
  • 优化XPath定位:改用contains(@class, "reviewText")代替固定的div索引(比如div[5]),避免网页结构微调导致定位失效。

额外说明

如果需要抓取多页评论,可添加翻页逻辑:找到下一页按钮,判断其是否可点击,循环点击后重复执行评论抓取步骤即可。

内容的提问来源于stack exchange,提问作者R Sandy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 17:52:43