使用rvest抓取CSO发布日历遇默认7天数据提取问题求助
解决rvest无法抓取CSO发布日历动态内容的问题
问题原因
CSO官网的发布日历数据是通过JavaScript动态渲染的,read_html()只能获取页面的静态HTML源码,默认情况下看不到动态加载的未来7天数据,所以直接用html_nodes('td')提取不到内容。
解决方案
方法一:用RSelenium模拟浏览器加载(适合新手)
RSelenium可以模拟真实浏览器打开页面,等待动态内容加载完成后再抓取:
library(RSelenium) library(rvest) library(dplyr) # 启动浏览器(需提前配置好ChromeDriver) driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]] # 打开目标页面 remDr$navigate("https://www.cso.ie/en/csolatestnews/releasecalendar") # 等待页面加载完成(可根据网络情况调整等待时间) Sys.sleep(3) # 获取加载后的页面源码 page_source <- remDr$getPageSource()[[1]] url <- read_html(page_source) # 提取日历数据 calendar_data <- url %>% html_nodes('table') %>% html_table() %>% .[[1]] # 关闭浏览器 remDr$close() driver$server$stop() # 查看结果 print(calendar_data)
方法二:直接请求API接口(高效推荐)
通过浏览器开发者工具可以找到页面加载数据的API接口,直接请求接口获取JSON数据,无需模拟浏览器:
library(httr) library(jsonlite) library(dplyr) # 请求API接口获取未来7天的日历数据 response <- GET("https://www.cso.ie/api/releases/getreleases?days=7") data <- fromJSON(content(response, "text")) # 将JSON数据转换为数据框 calendar_df <- as.data.frame(data) # 查看整理后的数据 print(calendar_df)
注:API接口是从页面的网络请求中抓取的,若后续网站接口变更,需要重新检查开发者工具中的请求。
内容的提问来源于stack exchange,提问作者Michael Flanagan
相关产品推荐
相关产品推荐

