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

如何在R中抓取需交互的网页文本?实现点击展开完整评论

解决TripAdvisor长评论抓取问题:获取完整内容的两种方案

这个问题太典型了——TripAdvisor的长评论默认只显示截断内容,点击"More"才会通过JavaScript加载/显示完整文本,而rvest只能抓取页面初始渲染的静态HTML,所以拿不到隐藏的部分。下面给你两种靠谱的解决办法:

方案一:用RSelenium模拟浏览器点击"More"

RSelenium可以模拟真实浏览器的操作,帮你自动点击所有"More"按钮,等页面加载完整后再抓取评论。

步骤和代码示例:

  1. 先安装必要的包(如果没装过):
install.packages("RSelenium")
install.packages("rvest")
install.packages("wdman")
  1. 启动浏览器驱动(这里以Chrome为例,确保你已经安装了Chrome浏览器和对应版本的chromedriver):
library(RSelenium)
library(rvest)
library(wdman)

# 启动Chrome驱动
chrome_driver <- chrome()
remDr <- remoteDriver(browserName = "chrome")
remDr$open()
  1. 访问目标页面,等待加载完成,然后点击所有"More"按钮:
tripAdvisorURL <- "https://www.tripadvisor.com/Hotel_Review-g33657-d85704-Reviews-Hotel_Bristol-Steamboat_Springs_Colorado.html#REVIEWS"

# 导航到页面
remDr$navigate(tripAdvisorURL)
# 等待页面加载(可以根据实际情况调整等待时间)
Sys.sleep(3)

# 找到所有"More"按钮并点击
more_buttons <- remDr$findElements(using = "css selector", value = ".partial_entry .taLnk")
for(button in more_buttons) {
  tryCatch({
    button$clickElement()
    Sys.sleep(0.5) # 给一点加载时间
  }, error = function(e) {
    # 跳过已经展开的按钮(有些可能已经是"Less"状态,点击会报错)
    message("跳过无法点击的按钮: ", e$message)
  })
}
  1. 现在页面上的评论都已经展开,抓取完整内容:
# 获取页面的HTML
page_source <- remDr$getPageSource()[[1]]
webpage <- read_html(page_source)

# 提取完整评论
reviewData <- xml_nodes(webpage, xpath = '//*[contains(concat( " ", @class, " " ), concat( " ", "partial_entry", " " ))]')
full_reviews <- xml_text(reviewData)

# 查看第一条完整评论
cat(full_reviews[[1]])
  1. 最后记得关闭驱动:
remDr$close()
chrome_driver$stop()

方案二:直接调用TripAdvisor的评论API(更高效)

模拟浏览器虽然直观,但速度慢还依赖浏览器。另一种更高效的方式是找到TripAdvisor加载评论的后台API,直接请求JSON数据,里面包含完整的评论内容。

步骤和代码示例:

  1. 打开浏览器开发者工具(F12),切换到"Network"标签,刷新页面,找到加载评论的XHR请求(通常是包含"reviews"或"api"的请求)。比如你这个页面的评论API大概是类似这样的(参数可能需要调整):
library(httr)
library(jsonlite)

# 构造API请求URL(参数可以从浏览器开发者工具里复制)
api_url <- "https://www.tripadvisor.com/Hotel_Review-g33657-d85704-Reviews-or0-Hotel_Bristol-Steamboat_Springs_Colorado.html?filterLang=en&returnJson=true"

# 发送请求
response <- GET(api_url)
review_json <- fromJSON(content(response, "text"))

# 提取完整评论内容
full_reviews <- review_json$reviews$data$review_text
# 查看第一条评论
cat(full_reviews[[1]])

注意:API的URL和参数可能会随TripAdvisor的网站更新而变化,你需要自己在浏览器里抓最新的请求地址和参数。这种方法的优势是速度快,不需要模拟浏览器,适合批量抓取。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:48:44