You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R动态网页抓取:RSelenium替代方案及Chrome 107适配需求

解决Chrome 107环境下RSelenium运行问题及替代动态抓取工具推荐

一、Chrome 107适配RSelenium的具体方案

RSelenium的版本限制源于ChromeDriver与Chrome浏览器版本必须严格匹配,你可以通过手动指定对应版本的ChromeDriver解决:

  1. 找到Chrome 107对应的ChromeDriver完整版本号(比如107.0.5304.62,版本号前四位需与Chrome主版本一致),下载对应系统的Driver文件。
  2. 在RSelenium初始化时,明确指定Driver版本和Chrome安装路径:
library(RSelenium)
# 初始化驱动,替换为你的实际路径和版本号
driver_obj <- rsDriver(
  browser = "chrome",
  chromever = "107.0.5304.62",
  extraCapabilities = list(
    chromeOptions = list(
      binary = "C:/Program Files/Google/Chrome/Application/chrome.exe"
    )
  )
)
remDr <- driver_obj[["client"]]

若ChromeDriver不在系统默认路径,可设置chromever = NULL,再通过chromeOptions = list(args = c("--webdriver-path=/path/to/chromedriver"))指定Driver文件位置。

二、替代RSelenium的R动态网页抓取工具

针对healthgrades这类依赖JS渲染的网站,推荐以下工具:

1. {playwright}(首推)

R版Playwright支持自动管理浏览器驱动,无需手动匹配版本,API简洁且功能强大,完美替代RSelenium:

# 安装依赖
install.packages("playwright")
playwright::install_browsers() # 自动下载适配的浏览器

# 抓取医生年龄示例
library(playwright)
# 启动Chrome(headless=FALSE可显示浏览器,调试用)
pw <- chromium(headless = FALSE)
page <- pw$new_page()

# 模拟搜索操作
page$goto("https://www.healthgrades.com/")
page$fill('input[data-testid="search-input"]', "cardiologist New York")
page$click('button[data-testid="search-submit"]')

# 等待元素加载完成后抓取数据
page$wait_for_selector('.provider-card__age')
age_list <- page$locator('.provider-card__age')$all_text_content()
print(age_list)

# 关闭浏览器
pw$close()

Playwright支持等待元素加载、模拟用户交互,能处理复杂的动态渲染场景。

2. {rvest} + {V8}(高效API抓取)

若能分析出healthgrades的API接口,这种方法比模拟浏览器更高效:

  1. 用浏览器开发者工具(F12)找到加载医生数据的API请求(通常是XHR类型),复制URL和请求参数。
  2. 用httr请求数据,V8解析JSON:
library(httr)
library(V8)

# 替换为实际抓取到的API接口和参数
api_response <- GET(
  url = "https://www.healthgrades.com/api/providers/search",
  query = list(
    specialty = "cardiology",
    location = "New York, NY",
    pageSize = 20
  ),
  add_headers("User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")
)

# 解析返回的JSON数据
ctx <- v8()
data <- ctx$eval(paste0("(", content(api_response, "text"), ")"))
# 提取年龄字段
doctor_ages <- sapply(data$searchResults$providers, function(x) x$age)
print(doctor_ages)

这种方法避开了浏览器渲染开销,但需要具备基本的API分析能力。

3. {phantomjs} + {rvest}(备选)

PhantomJS是无头浏览器,对旧网站兼容性尚可,适合简单场景:

library(rvest)
library(webdriver)

# 启动PhantomJS驱动
driver <- run_phantomjs()
session <- Session$new(driver)

# 访问页面并抓取HTML
session$go("https://www.healthgrades.com/search?q=cardiologist+NY")
page_source <- session$getPageSource()[[1]]
doc <- read_html(page_source)

# 提取年龄数据
ages <- doc %>% html_elements(".provider-card__age") %>% html_text()
print(ages)

# 关闭会话
session$delete()
driver$stop()

注意:PhantomJS已停止维护,不支持最新JS特性,若网站更新渲染技术可能失效。

注意事项

  • 抓取healthgrades数据时需遵守网站robots.txt规则,可添加Sys.sleep(2)这类延迟避免被封IP。
  • 页面元素选择器可能随网站更新变化,需用开发者工具实时确认最新选择器。

内容的提问来源于stack exchange,提问作者amany marey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:25:31