使用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
相关产品推荐
相关产品推荐

