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

使用R Studio的rvest无法抓取网页文本框内容求助

问题分析与解决方案

你的问题出在目标页面的文本内容是通过JavaScript动态渲染的,read_html()只能获取页面初始的静态HTML源码,此时#text_frame元素还没有被填充实际内容,所以提取结果为空。

下面提供两种可行的解决方法:

方法一:用RSelenium模拟浏览器加载动态内容

通过模拟真实浏览器的行为,等待页面JavaScript执行完成后再提取内容:

# 首次运行先安装依赖包
install.packages(c("RSelenium", "rvest", "wdman"))

library(RSelenium)
library(rvest)
library(wdman)

# 启动Chrome驱动(确保本地已安装Chrome浏览器)
driver <- rsDriver(browser = "chrome", chromever = latest_chrome_version())
remDr <- driver[["client"]]

# 访问目标页面
remDr$navigate("https://exploreuk.uky.edu/catalog/xt7t1g0hx952#page/1/mode/1up")

# 等待页面加载完成(根据网络情况调整等待时间)
Sys.sleep(5)

# 获取渲染后的页面源码并解析
page_source <- remDr$getPageSource()[[1]]
page <- read_html(page_source)

# 提取文本内容
text <- page %>% html_elements("#text_frame") %>% html_text()

# 查看结果
cat(text)

# 关闭浏览器驱动
remDr$close()
driver$server$stop()

方法二:直接调用后台API接口(更高效)

打开浏览器开发者工具的「网络」面板,刷新页面后可以找到加载文本内容的API接口(通常是XHR请求),直接请求该接口获取数据,无需模拟浏览器:

library(httr)
library(jsonlite)

# 替换为实际的API接口(可通过浏览器网络面板抓取)
api_url <- "https://exploreuk.uky.edu/catalog/api/v1/items/xt7t1g0hx952/pages/1/text"

# 发送请求并解析JSON数据
response <- GET(api_url)
text_data <- fromJSON(content(response, "text"))

# 提取文本内容
text <- text_data$content
cat(text)

方法对比

  • RSelenium:通用性强,适合各种动态渲染页面,但运行速度较慢,需要依赖浏览器环境。
  • API请求:速度快、资源消耗低,但需要手动查找接口,部分网站可能有反爬限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:22:35