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

使用Rvest提取HTML表格时日期与链接丢失的问题求助

解决Rvest提取HTML表格时日期和链接内容丢失的问题

html_table()函数仅能提取HTML元素的文本内容,但你的日期存储在<time>标签的datetime属性中,链接(示例中假设为<a>标签的href属性,原代码里的<link>可能是笔误)属于元素属性,无法被html_table()自动捕获。需要手动提取属性值后组合成目标表格。

单数据行解决方案代码

library(rvest)

# 修正HTML字符串的转义引号问题,确保解析正常
string <- '<table class="wrapped">
<colgroup>
<col>
<col>
</colgroup>
<tbody>
<tr>
<th>Date</th>
<th>Finding List</th>
</tr>
<tr>
<td colspan="1"><div class="content-wrapper"><p><time datetime="2021-01-04"></time> </p></div></td>
<td colspan="1"><div class="content-wrapper"><p><a href="https://example.com/findings">查看列表</a></p></div></td>
</tr>
</tbody>
</table>'

# 解析HTML内容
html <- read_html(string)

# 提取表头
headers <- html %>% html_nodes("th") %>% html_text()

# 提取日期:获取<time>标签的datetime属性值
date_val <- html %>% html_node("time") %>% html_attr("datetime")

# 提取链接:获取<a>标签的href属性值(若原HTML是<link>,替换为html_node("link")并对应属性)
link_val <- html %>% html_node("a") %>% html_attr("href")

# 组合成目标表格
result_df <- data.frame(
  Date = date_val,
  `Finding List` = link_val
)

print(result_df)

多行表格的批量处理方式

如果表格包含多行数据,可通过循环遍历每一行提取属性:

# 提取所有数据行(跳过表头行)
data_rows <- html %>% html_nodes("tbody tr") %>% .[-1]

# 批量处理每行数据
result_list <- lapply(data_rows, function(row) {
  row_date <- row %>% html_node("time") %>% html_attr("datetime")
  row_link <- row %>% html_node("a") %>% html_attr("href")
  data.frame(Date = row_date, `Finding List` = row_link)
})

# 合并为最终数据框
final_table <- do.call(rbind, result_list)
colnames(final_table) <- headers

核心原因

html_table()的底层逻辑是遍历表格单元格,仅提取<td>/<th>标签内的可见文本内容,不会读取子元素的属性值。因此存储在标签属性中的日期、链接等信息,必须通过html_attr()方法主动提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:52:25