如何通过chromote加载网页后使用rvest进行网页数据抓取?
解决Chromote + rvest 网页抓取的问题
你之前的代码无法运行,核心问题是b$DOM$getDocument()返回的是DOM节点的结构化数据,不是rvest能直接解析的纯HTML文本。要让两者配合工作,需要先从Chromote中提取完整的页面HTML源码,再交给rvest处理。
以下是可行的完整代码:
library(chromote) library(rvest) # 初始化Chromote会话 b <- ChromoteSession$new() # 导航到目标网站并等待页面加载完成(必须加这一步,否则会拿到未加载完全的内容) b$Page$navigate("https://www.ooir.org/") b$Page$wait_for_navigation() # 通过JS获取页面完整的HTML源码 page_html <- b$Runtime$evaluate("document.documentElement.outerHTML")$result$value # 将HTML字符串转换成rvest可处理的文档对象 html_doc <- read_html(page_html) # 现在可以正常用rvest提取内容了 links <- html_doc %>% html_nodes("a") # 查看前几个链接示例 head(links)
关键细节说明:
- 必须调用
wait_for_navigation():navigate是异步操作,直接获取HTML会拿到未加载完成的页面内容,导致后续提取出错。 - 用
Runtime$evaluate()获取HTML:通过执行JS代码document.documentElement.outerHTML,可以拿到整个页面的完整HTML代码,比DOM$getDocument()的返回结果更适配rvest的解析逻辑。 read_html()是rvest的核心转换函数:它能把纯HTML字符串转换成可操作的文档对象,之后就能用html_nodes()、html_text()等方法完成元素提取。
内容的提问来源于stack exchange,提问作者anpami
相关产品推荐
相关产品推荐

