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

R语言使用rvest提取HTML表格时如何获取单元格内超链接而非文本

解决方法

html_table() 仅能提取单元格的纯文本内容,超链接属于<a>标签的href属性,不会被该函数捕获。你需要调整采集逻辑,保留原始HTML节点才能提取链接信息,完整实现步骤如下:

1 修正采集代码,保留原始HTML对象

你之前的代码将out定义为字符向量,无法存储html_table()返回的表格数据结构,首先调整这部分逻辑:

library(rvest)
library(dplyr)
library(xml2)
library(tidyverse)

jump <- seq(1, 2, by = 1)
urls <- paste('https://asbdavani.org/horse/foals/', jump, sep="")
# 用列表存储每个页面的原始HTML和提取的表格文本
page_data <- vector("list", length = length(urls))

for(i in seq_along(urls)){
  derby <- read_html(urls[i], encoding="UTF-8")
  page_data[[i]] <- list(
    raw_html = derby,
    # 取页面第一个表格,如需提取其他表格,调整[[序号]]即可,序号从1开始
    table_data = derby %>% html_table(fill = TRUE) %>% .[[1]]
  )
}
# 提取第一个页面的表格文本
first_table <- page_data[[1]]$table_data

2 提取第2、6、7列的超链接

# 定位第一个页面对应的表格节点
target_table_node <- page_data[[1]]$raw_html %>% 
  html_element("table") # 若提取第n个表格,替换为html_elements("table")[[n]]

# 计算表格总列数
total_cols <- target_table_node %>% 
  html_elements("tr:first-child td") %>% 
  length()
# 目标列索引
target_cols <- c(2,6,7)

# 批量提取目标列的超链接,无链接的单元格返回NA
col_links <- lapply(target_cols, function(col_num){
  # 定位该列所有单元格节点
  col_cell_nodes <- target_table_node %>% 
    html_elements("tr td") %>% 
    .[seq(col_num, length(.), by = total_cols)]
  # 提取href属性
  sapply(col_cell_nodes, function(cell){
    a_node <- cell %>% html_element("a")
    if(is.na(a_node)) return(NA_character_)
    return(html_attr(a_node, "href"))
  })
}) %>% setNames(paste0("col_", target_cols, "_url"))

# 将超链接合并到原表格中
first_table_with_url <- bind_cols(first_table, as.data.frame(col_links))

补充说明

  • 若提取到的链接是相对路径,可通过paste0("https://asbdavani.org", 相对路径)补全为完整可访问链接
  • 若单元格内没有嵌套<a>标签,对应结果会返回NA,方便后续过滤处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:45:02