使用RSelenium提取JS网站MRC地区名遇本地连接错误求解决
解决RSelenium连接错误并批量提取MRC标识与地区名称
一、修复RSelenium连接失败问题
如果坚持使用RSelenium,按以下步骤排查:
检查端口占用:
4545端口可能被其他程序占用,先验证:- Windows:运行
netstat -ano | findstr :4545 - macOS/Linux:运行
lsof -i :4545
若占用,更换端口重新初始化:
rD <- rsDriver(browser="chrome", port=4546L, chromever = NULL)- Windows:运行
手动指定ChromeDriver版本:
自动版本检测可能失效,先查看Chrome浏览器版本(设置→关于Chrome),然后匹配指定chromever参数:# 示例:Chrome版本为114.0.5735.90时 rD <- rsDriver(browser="chrome", port=4545L, chromever = "114.0.5735.90")关闭防火墙/代理:
本地防火墙或代理可能拦截Selenium的本地连接,暂时关闭后重试,或把R加入防火墙允许列表。切换至Firefox浏览器:
若Chrome配置始终有问题,尝试改用Firefox:rD <- rsDriver(browser="firefox", port=4545L)
二、更高效的批量提取方案(无需RSelenium)
通过分析网站的网络请求,发现可直接调用官方API获取所有MRC数据,无需逐个加载页面,效率更高:
library(httr) library(jsonlite) library(dplyr) # 请求API获取所有MRC地区信息 response <- GET("https://portraits.ouranos.ca/api/regions?type=mrc&lang=fr") mrc_raw_data <- fromJSON(content(response, "text")) # 整理为目标格式的data.frame mrc_result <- mrc_raw_data %>% mutate(mrc_id = paste0("mrc", sprintf("%03d", id))) %>% # 生成mrcXXX格式的标识 select(mrc_id, name) %>% # 保留需要的列 arrange(mrc_id) # 按标识排序 # 查看前6条结果 head(mrc_result)
该方法直接拿到所有104个MRC的标识与对应名称,完全规避了RSelenium的配置问题,且运行速度远超浏览器渲染方案。
内容的提问来源于stack exchange,提问作者M. Beausoleil
相关产品推荐
相关产品推荐

