使用map()批量转换HTML为RDS时触发UseMethod()报错求助
解决批量HTML转RDS时
xml_find_first方法不适用的错误 问题定位
错误出现在第19531个文件的处理流程中,本质是html_text2()内部调用的xml_find_first无法处理当前解析出的xml_document对象。大概率是目标HTML文件格式异常、损坏或不符合标准规范,导致html_text2()的内部逻辑无法正常执行。
解决方案
1. 增加错误捕获,避免批量任务中断
修改代码加入tryCatch,让单个文件失败时不终止整个批量流程,同时记录错误文件信息:
library(purrr) library(rvest) library(stringr) rip_text <- function(court_file){ tryCatch({ ripped_text <- read_html(court_file, options = "HUGE") |> html_text2() |> str_remove('^.*PubDate":"\\d{4}-\\d\\d-\\d\\d",\n') |> str_remove('\\}";; var jsonData.*$') list(file = court_file, text = ripped_text, error = NA) }, error = function(e){ message(paste("处理失败:", court_file)) list(file = court_file, text = NA, error = as.character(e)) }) } # 执行批量处理 ripped_files <- map(html_files, rip_text) # 分离成功结果与错误日志 success_data <- keep(ripped_files, ~is.na(.x$error)) error_records <- keep(ripped_files, ~!is.na(.x$error)) # 保存结果 saveRDS(success_data, "success_ripped_texts.rds") saveRDS(error_records, "error_log.rds")
2. 排查异常文件
从error_records中取出出错文件路径,手动验证:
problem_file <- html_files[19531] # 检查文件解析结果 doc <- read_html(problem_file, options = "HUGE") # 手动测试html_text2的报错详情 html_text2(doc)
如果文件确实存在损坏、乱码或非标准标记,可直接跳过该文件,或修复格式后重新处理。
3. 替换文本提取函数提升兼容性
若html_text2对异常HTML兼容性不足,可改用更基础的html_text替代,虽然可能保留更多冗余文本,但能避免方法不适用的错误:
ripped_text <- read_html(court_file, options = "HUGE") |> html_text() |> # 替换为html_text str_remove('^.*PubDate":"\\d{4}-\\d\\d-\\d\\d",\n') |> str_remove('\\}";; var jsonData.*$')
内容的提问来源于stack exchange,提问作者Jinggggggg
相关产品推荐
相关产品推荐

