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

使用R与rvest爬取TripAdvisor“What to expect”文本遇阻求助

解决TripAdvisor页面“What to expect”文本提取问题

问题原因

TripAdvisor的“What to expect”板块是通过JavaScript动态渲染的,rvest的read_html()只能获取页面初始的静态HTML,无法加载JS生成的内容,所以你之前用各种CSS选择器都找不到目标元素。

可行方案

方案一:用playwright模拟浏览器加载动态内容

playwright可以模拟真实浏览器行为,完整加载页面的动态内容,步骤如下:

  1. 安装依赖包:
install.packages("playwright")
playwright::install_browsers()
  1. 编写提取代码:
library(playwright)
library(rvest)

# 启动无头浏览器(headless=FALSE可显示浏览器窗口)
browser <- playwright$chromium$launch(headless = TRUE)
page <- browser$new_page()

# 访问目标页面
page$goto("https://www.tripadvisor.com/AttractionProductReview-g60750-d12086300-San_Diego_Whale_Watching_Cruise-San_Diego_California.html")

# 等待目标板块加载完成,确保元素已渲染
page$wait_for_selector("div[data-test-target='what-to-expect']")

# 获取完整页面HTML
full_html <- page$content()
webpage <- read_html(full_html)

# 提取“What to expect”板块文本
what_to_expect_text <- webpage %>% 
  html_node("div[data-test-target='what-to-expect']") %>% 
  html_text(trim = TRUE)

print(what_to_expect_text)

# 关闭浏览器
browser$close()

方案二:直接调用页面API接口(更高效)

TripAdvisor会通过AJAX请求加载动态内容,你可以通过浏览器开发者工具抓包找到对应的API接口,直接请求获取数据,无需模拟浏览器:

  1. 抓包步骤:打开浏览器F12→切换到Network标签→筛选XHR请求,找到加载“What to expect”数据的POST请求(通常是/data/graphql/ids),复制请求参数和头信息。

  2. 示例代码(参数需根据实际抓包结果调整):

library(httr2)
library(jsonlite)

# 构造API请求
api_req <- request("https://www.tripadvisor.com/data/graphql/ids") %>%
  req_headers(
    "Content-Type" = "application/json",
    "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
  ) %>%
  req_body_json(list(
    queryId = "7103567709691533000",  # 该ID可能随页面更新变化,需抓包确认
    variables = list(
      locationId = "60750",
      productId = "12086300"
    )
  ))

# 发送请求并解析数据
resp <- req_perform(api_req)
result_data <- resp_body_json(resp)

# 提取目标文本
what_to_expect_text <- result_data$data$productDetailPage$whatToExpect$text
print(what_to_expect_text)

注意:API的queryId和参数可能会被TripAdvisor更新,每次使用前需重新抓包确认最新值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:05:37