在R中使用RSelenium抓取动态网页遇启动及版本兼容问题
解决R中动态网页抓取的问题(RSelenium故障及替代方案)
修复RSelenium的驱动兼容问题
RSelenium的核心故障多源于驱动版本不匹配或端口占用,使用wdman包可自动处理驱动匹配,无需手动下载:
Chrome驱动修复
install.packages("wdman") library(wdman) library(RSelenium) # 自动下载匹配当前Chrome版本的驱动,并启动服务 chrome_service <- wdman::chrome() remDr <- remoteDriver(browserName = "chrome", port = chrome_service$port) remDr$open()
wdman会自动检测Chrome版本,下载对应ChromeDriver,彻底解决版本不兼容问题。
Firefox驱动修复
若Firefox端口连接失败,同样用wdman管理驱动,同时检查端口占用:
firefox_service <- wdman::firefox() remDr <- remoteDriver(browserName = "firefox", port = firefox_service$port) remDr$open()
- 若仍报错,检查4545端口是否被占用:
- Windows:运行
netstat -ano | findstr :4545,找到PID后在任务管理器终止对应进程 - Mac/Linux:运行
lsof -i :4545,用kill <PID>终止进程
- Windows:运行
更高效的无浏览器替代方案
动态网页的数据通常通过API加载,直接抓取API比浏览器渲染更高效:
直接调用EURONEXT的公开API
install.packages(c("httr", "jsonlite")) library(httr) library(jsonlite) # 构造API请求,可调整market、page、size参数筛选数据 api_url <- "https://live.euronext.com/en/json/equities_list" request_params <- list( market = "all", page = 1, size = 100 ) # 获取并解析JSON数据 response <- GET(api_url, query = request_params) raw_data <- fromJSON(content(response, "text")) equities_data <- raw_data$equities # 查看结果 head(equities_data)
用rvest+V8解析页面JS数据
若API难以定位,可提取页面中嵌入的JS数据(适用于React/Vue构建的网站):
install.packages(c("rvest", "V8")) library(rvest) library(V8) # 获取页面HTML target_url <- "https://live.euronext.com/en/products/equities/list" page_html <- read_html(target_url) # 提取嵌入的JS数据块 js_data <- html_element(page_html, "script#__NEXT_DATA__") %>% html_text() # 用V8引擎解析JS数据 js_ctx <- v8() js_ctx$eval(paste0("var pageData = ", js_data)) parsed_data <- js_ctx$get("pageData") # 提取股票列表 equities_list <- parsed_data$props$pageProps$initialState$equitiesList$equities head(equities_list)
内容的提问来源于stack exchange,提问作者oibaFox
相关产品推荐
相关产品推荐

