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

如何将xml_document/xml_node对象存入tibble并正常执行mutate操作

问题原因

你遇到的报错主要来自三个问题:

  • 列名引用错误:你存储HTML对象的列名为html,但提取节点时写的是不存在的page列
  • CSS选择器拼写错误:目标节点ID是#exampleApplSuppl,你代码里写成了#examleApplSuppl(少了一个字母p)
  • 列表列处理逻辑错误:tibble里的html列是列表类型,每一个元素都是单独的xml_document对象,直接对整列unlist不符合逐行处理的逻辑,需要用行处理函数遍历每个元素

解决方案

有两种常用的实现方式,均支持单页/多页批量处理场景:

方式1:配合purrr::map处理列表列

因为列表列的每个元素都是独立的HTML对象,用map遍历每个对象执行节点提取操作,结果也会自动存为列表列,方便后续继续处理:

library(tidyverse)
library(rvest)

# 构造存储HTML的tibble
works <- tibble(
  html = list(
    read_html("https://www.accessdata.fda.gov/scripts/cder/daf/index.cfm?event=overview.process&ApplNo=040445")
  )
)

# 用map提取节点
works <- works %>%
  mutate(table = map(html, ~html_nodes(.x, "#exampleApplSuppl")))

如果要进一步提取表格内容,可以继续链式调用map处理:

works <- works %>%
  mutate(table_content = map(table, ~html_table(.x, fill = TRUE)[[1]]))

方式2:用rowwise()逐行处理

如果不习惯map的语法,也可以先将tibble转为行处理模式,直接对每个行的html对象操作:

works <- works %>%
  rowwise() %>%
  mutate(table = list(html_nodes(html, "#exampleApplSuppl"))) %>%
  ungroup() # 处理完成后建议取消行模式,避免后续操作出现异常

验证结果

处理完成后可以查看提取到的节点是否正确:

works$table[[1]]
# 输出会显示匹配到的table节点信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:08