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

R用rvest爬取时将<p>XML节点集转换为dataframe的实现方法

实现方案

该需求完全可以实现,核心思路是将每个<div.accordion-inner>下的<p>文本拆分为「字段名-字段值」键值对,转为单行数据框后合并即可。

依赖包准备

提前加载所需依赖:

library(rvest)
library(stringr)
library(plyr)
library(dplyr)

核心处理函数

编写单个代理人节点的解析函数,将节点转为单行数据框:

# 输入单个accordion-inner节点,输出对应单行数据框
parse_agent <- function(agent_node) {
  # 提取所有p标签文本,清除多余空格、换行符,过滤空内容
  p_texts <- agent_node %>% 
    html_nodes("p") %>% 
    html_text() %>% 
    str_squish() %>% 
    .[. != ""]
  
  # 拆分每个文本为键值对,仅拆分第一个冒号避免字段值内的冒号干扰
  key_value_list <- lapply(p_texts, function(text) {
    parts <- str_split(text, ":\\s*", n = 2)[[1]]
    if(length(parts) != 2) return(NULL) # 跳过不符合键值格式的内容
    setNames(parts[2], parts[1])
  }) %>% unlist()
  
  # 转为单行数据框
  as.data.frame(t(key_value_list), stringsAsFactors = FALSE)
}

完整执行流程

# 原有页面获取逻辑
agents_url <- "https://nbpa.com/agents/directory"
agents_page <- read_html(agents_url)
agents_page_elements <- html_nodes(agents_page, 'div.accordion-inner')

# 批量解析所有代理人节点
agent_df_list <- lapply(agents_page_elements, parse_agent)

# 合并所有单行数据框,缺失字段自动填充NA
final_agent_df <- rbind.fill(agent_df_list)

可选优化

可对列名做标准化处理,方便后续数据操作:

# 列名统一转小写、空格替换为下划线
colnames(final_agent_df) <- colnames(final_agent_df) %>% 
  str_to_lower() %>% 
  str_replace_all("\\s+", "_")

如果需要保留不符合键值格式的特殊内容,可调整拆分逻辑,将异常内容统一存入自定义的other_info列即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:15:03