R语言使用rvest包html_text()仅抓取新闻首个段落如何解决
问题产生原因
- 核心错误是使用了
html_node()函数:该函数仅返回匹配CSS选择器的第一个节点对象,所以只能提取到#content下的第一个标签内容,后续所有正文段落都会被忽略。
- 你提到的
html_text()和html_text2()差异仅在于文本清洗规则,和多段落提取失败无关,目标页面为静态渲染,所有正文段落都包含在初始HTML源码中,无需处理动态加载问题。
代码调整方案
方案1:提取所有段落并保留排版
先获取所有正文段落节点,提取文本后用换行符拼接,可保留原有段落分隔:
library(rvest) full_article <- read_html("https://ethiopianmonitor.com/2021/08/27/prime-minister-abiy-attends-g20-compact-with-africa-meeting/") %>% html_nodes("#content p") %>% # 改用html_nodes获取所有匹配的p标签节点 html_text2() %>% # html_text2会自动清理多余空白、转义字符,提取效果更好 paste(collapse = "\n\n") # 用双换行分隔不同段落,还原正文排版
方案2:直接提取整块正文内容
如果不需要单独处理每个段落,可直接选中整块正文容器提取文本:
library(rvest) full_article <- read_html("https://ethiopianmonitor.com/2021/08/27/prime-minister-abiy-attends-g20-compact-with-africa-meeting/") %>% html_node("#content") %>% # 选中正文区域的父容器 html_text2()
内容的提问来源于stack exchange,提问作者purple1437
相关产品推荐
相关产品推荐

