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

使用rvest包网页抓取失效,提取表格出现多余NA列问题

问题根因

  • 目标网站近期调整了表格结构,首尾新增了跨列的说明/备注行,html_table解析时会根据最大列数自动补全单元格,导致生成多余全NA列
  • 表格数值单元格现在嵌入了不可见空白字符,且小数分隔符为西语逗号,原代码的小数点参数配置错误导致无法识别数值

修复后可运行代码

library(rvest)
library(stringr)

url <- paste0("https://climatologia.meteochile.gob.cl/application/mensual/temperaturaMediaMensual/170007/2021/08")
tmp <- read_html(url)
# 定位目标表格
target_table <- html_nodes(tmp,"table")[[1]]
# 移除首尾跨列无效行
table_rows <- html_children(target_table) %>% `[`(-c(1, length(.)))
# 重构表格节点
clean_table <- xml2::xml_new_root("table")
xml2::xml_add_child(clean_table, table_rows)
# 解析表格,小数分隔符改为西语逗号
tabla <- html_table(clean_table, fill = TRUE, header = 1, dec = ",")
# 删除全为NA的冗余列
tabla <- tabla[, colSums(is.na(tabla)) < nrow(tabla)]
# 清理数值列的不可见字符后转格式
num_cols <- 2:ncol(tabla)
tabla[num_cols] <- lapply(tabla[num_cols], function(x) {
  as.numeric(stringr::str_remove_all(x, "[^0-9,\\-]") %>% stringr::str_replace(",", "."))
})

调整说明

  • 移除了表格首尾会导致列数不匹配的跨列说明行,避免生成冗余空列
  • 修正了小数分隔符配置,匹配站点西语格式的数值展示规则
  • 增加了数值列的字符清理逻辑,移除单元格内嵌的不可见空白字符后再转换为数值格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:27:04