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

R rvest文本抓取:如何从HTML节点移除指定标签并提取p标签文本

解决方法

你可以按p节点为单位逐个处理,先删除每个p节点内不需要的a、b节点,再提取合并后的文本,示例代码如下:

# 加载依赖包
library(rvest)
library(httr)
library(purrr)
library(xml2)

# 抓取解析页面
page <- GET(url = "https://xxx") %>% 
  read_html()

# 提取所有目标p节点
p_list <- page %>% 
  html_elements(xpath = "//div[@class='speech']/p")

# 逐个处理p节点,输出字符向量
result <- map_chr(p_list, function(p_node) {
  # 删除当前p节点内所有a、b节点及对应内容
  xml_remove(xml_find_all(p_node, ".//a|.//b"))
  # 提取合并文本:自动将所有子文本拼接为单个字符串,保留i、sup内部文本,去除标签
  # 若需要保留浏览器渲染格式的换行用html_text2(),不需要多余空白用html_text(trim = TRUE)
  html_text(p_node, trim = TRUE)
})

# 如需转数据框直接转换即可
df <- data.frame(speech_text = result)

逻辑说明

你之前的代码直接提取所有文本节点,会把被标签拆分的每一段文本都作为独立元素返回,自然会拆分同一个p节点的内容。新的处理逻辑:

  • 先定位到所有目标p节点,保证每个p为独立处理单元,最终每个p对应一个结果条目
  • 先删除每个p节点内不需要的a、b节点,直接过滤掉这部分内容
  • 调用html_text()提取文本时,会自动合并当前节点下所有文本内容,同时自动移除i、sup、br等标签,保留标签内部的文本,最终输出单个字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:09:03