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

使用R进行网页抓取返回{xml_nodeset (0)}的问题求助

解决思路

1. 先确认目标元素是否在静态HTML里

  • 运行browseURL("https://spritacular.org/gallery")打开网页,右键选「查看页面源代码」
  • 在源码里搜.card-title、.card-subtitle这些类名,要是搜不到,说明内容是JavaScript动态渲染的,read_html()只能拿到初始静态页面,抓不到动态加载的内容。

2. 处理动态加载内容的几种方案

方案一:用RSelenium模拟浏览器加载

RSelenium能模拟真实浏览器运行JS,获取渲染后的完整页面。示例代码:

library(RSelenium)
library(rvest)

# 启动Chrome浏览器(需提前安装ChromeDriver,版本要和浏览器匹配)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 访问目标页面
remDr$navigate("https://spritacular.org/gallery")

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

# 提取目标元素
sprite_location <- html_nodes(sprite_gallery, ".card-title , .card-subtitle , .mb-0")
print(sprite_location)

# 用完记得关闭浏览器
remDr$close()
driver$server$stop()

方案二:直接抓取网站的API接口

打开浏览器F12开发者工具,切换到「网络」标签,刷新页面,找XHR/fetch类型的请求,很多动态网站会用API接口返回数据,直接请求接口比模拟浏览器更高效。找到接口后,用httr或jsonlite请求解析数据即可。

方案三:用V8引擎提取页面内嵌的JS数据

如果页面里有内嵌的JS数据对象,比如把数据存在某个变量里,可以用V8引擎解析提取:

library(rvest)
library(V8)

# 获取静态页面
url <- "https://spritacular.org/gallery"
sprite_gallery <- read_html(url)

# 提取页面中的JS脚本
js_scripts <- html_text(html_nodes(sprite_gallery, "script[type='text/javascript']"))

# 初始化V8环境,逐个解析脚本找数据
ctx <- v8()
for (script in js_scripts) {
  ctx$eval(script)
  # 假设数据存在名为spriteData的变量里,根据实际情况调整
  data <- try(ctx$get("spriteData"), silent = TRUE)
  if (!inherits(data, "try-error")) {
    print(data)
    break
  }
}

3. 排查反爬相关问题

有些网站会验证请求头,比如User-Agent,试试添加请求头再抓:

library(httr)
library(rvest)

url <- "https://spritacular.org/gallery"
# 模拟浏览器的User-Agent
headers <- add_headers(
  "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"
)
# 带请求头请求页面
response <- GET(url, headers)
sprite_gallery <- read_html(response)
# 再尝试提取元素
sprite_location <- html_nodes(sprite_gallery, ".card-title , .card-subtitle , .mb-0")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:45:14