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

如何用R提取20k个HTML文件中‘Principal Risks’后的文本?

批量提取HTML中Principal Risks后的文本方案

核心思路

别纠结复杂的标签嵌套,先把整个HTML转成纯文本,直接定位Principal Risks关键词,再提取后面指定数量的单词——这种方法能绕开标签结构的混乱问题,特别适合处理20000份格式不统一的文件。

具体实现(R语言)

1. 加载依赖工具包

用rvest解析HTML,stringr处理文本,purrr批量处理文件:

library(rvest)
library(stringr)
library(purrr)

2. 编写单文件处理函数

这个函数输入文件路径,输出提取到的风险文本:

extract_principal_risks <- function(file_path, num_words = 200) {
  # 读取并解析HTML文件
  html_content <- read_html(file_path)
  # 转成纯文本并清理多余空格
  plain_text <- str_squish(html_text(html_content))
  # 定位*Principal Risks*的位置(忽略大小写)
  risk_pos <- str_locate(plain_text, regex("Principal Risks", ignore_case = TRUE))[,2]
  if (is.na(risk_pos)) {
    return(NA) # 没找到关键词就返回空值
  }
  # 截取关键词之后的文本内容
  post_risk_content <- str_sub(plain_text, start = risk_pos + 1)
  # 分割成单词,取前指定数量后重新拼接
  word_list <- str_split(post_risk_content, "\\s+")[[1]]
  if (length(word_list) > num_words) {
    word_list <- word_list[1:num_words]
  }
  paste(word_list, collapse = " ")
}

3. 批量处理所有HTML文件

批量遍历目标文件夹里的HTML,把结果保存成CSV方便后续查看:

# 替换成你的HTML文件所在文件夹路径
html_files <- list.files(path = "your/html/folder/path", pattern = "\\.html$", full.names = TRUE)
# 批量提取,num_words可按需调整(比如改成500提取更多内容)
risk_results <- map(html_files, extract_principal_risks, num_words = 200)
# 转成数据框格式
result_table <- data.frame(
  文件名 = basename(html_files),
  风险文本 = unlist(risk_results)
)
# 保存结果到CSV
write.csv(result_table, "principal_risks_results.csv", row.names = FALSE, fileEncoding = "UTF-8")

额外提示

  • 纯文本方案的优势是不管内容被拆在多少个标签里,转成文本后都会连成一片,不会漏掉内容
  • 如果想保留段落结构,可以尝试定位包含关键词的节点,再抓取它的后续兄弟节点,但这种方法对HTML结构统一性要求高,不如纯文本方案稳定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:36:29