R语言rvest爬取时文本拆行引发字段重复的合并方法
问题场景
通过rvest包爬取网页文本生成的数据框df1存在两类结构异常:
- 属于同一条资讯的
News 2长文本,被网页节点的内部硬换行拆分为3个独立行存储 - 关联的
News 1列内容同步冗余重复2次,既造成数据行冗余,也导致单条资讯的文本不完整
最终处理目标为:将拆分到多行的News 2文本拼接为完整连贯的句子,与对应的News 1内容匹配存储在同一行,输出无冗余重复的单行资讯规范记录。
可直接落地的处理方案
基于dplyr的高效实现(适配绝大多数爬取场景)
处理逻辑核心:利用同一条资讯下News 1内容完全重复的特征,将其作为分组键,把同组内拆分的多段News 2文本拼接为整体,自动消除冗余重复行:
library(dplyr) clean_df <- df1 %>% # 以重复的News1为分组标识,归集同一条资讯的所有拆分行 group_by(`News 1`) %>% # 同组内分散的News2文本通过空格拼接为完整内容 summarise( `News 2` = paste(`News 2`, collapse = " ") ) %>% # 移除分组属性,恢复普通数据框结构 ungroup()
基础R原生实现(无需加载额外依赖)
如果不想引入第三方包,可通过基础函数实现完全相同的处理逻辑:
# 提取所有不重复的News1唯一值作为分组依据 unique_news1 <- unique(df1$`News 1`) # 遍历每个唯一的News1,归集对应的拆分文本并拼接 clean_list <- lapply(unique_news1, function(idx) { sub_rows <- df1[df1$`News 1` == idx, ] data.frame( `News 1` = idx, `News 2` = paste(sub_rows$`News 2`, collapse = " ") ) }) # 合并列表元素为最终规范数据框 clean_df <- do.call(rbind, clean_list)
常见适配调整
- 拼接完成后如果文本存在多余连续空格、换行残留,可追加文本清洗步骤:用
stringr包的str_squish()函数,或基础R的gsub("\\s+", " ", 待清洗文本)清理冗余空白字符 - 如果爬取得到的
News 1内容存在前后空格、全半角不统一的问题,可先对News 1列做标准化去重后,再执行分组拼接操作,避免分组失效
内容的提问来源于stack exchange,提问作者kaix
相关产品推荐
相关产品推荐

