使用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
相关产品推荐
相关产品推荐

