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

如何用rvest抓取美国PCAB复合药房相关数据?

抓取ACHC网站PCAB复合药房数据的解决方案
  • 问题根源:原代码无法获取数据是因为页面的药房数据是动态加载的,静态HTML中不存在.company_name元素,需要处理JavaScript渲染的内容或直接调用后端API。

方案1:直接调用后端API(高效推荐)

通过浏览器开发者工具可发现,搜索PCAB药房时页面会发送AJAX请求到后端接口,直接请求该接口即可获取结构化数据:

library(httr)
library(jsonlite)

# 构造请求参数,指定PCAB认证类型与美国地区
payload <- list(
  action = "provider_search",
  certification_type = "pcab",
  country = "US"
)

# 发送POST请求获取JSON数据
response <- POST(
  url = "https://www.achc.org/wp-admin/admin-ajax.php",
  body = payload,
  encode = "form"
)

# 解析JSON为数据框
pharmacy_data <- fromJSON(content(response, "text"))

# 提取核心字段示例:公司名、地址、城市、州、邮编
head(pharmacy_data$results[, c("company_name", "address", "city", "state", "zip")])

方案2:使用RSelenium模拟浏览器操作

如果API接口有变动,可通过模拟浏览器交互抓取动态加载内容:

library(RSelenium)
library(rvest)

# 启动Chrome浏览器(需提前安装对应版本的ChromeDriver)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 打开目标页面
remDr$navigate("https://www.achc.org/find-a-provider/")

# 勾选PCAB认证选项
pcab_option <- remDr$findElement(using = "xpath", value = "//input[@value='pcab']")
pcab_option$clickElement()

# 点击搜索按钮
search_btn <- remDr$findElement(using = "xpath", value = "//button[@id='search-providers']")
search_btn$clickElement()

# 等待页面加载完成
Sys.sleep(3)

# 获取页面源码并解析公司名称
page_source <- remDr$getPageSource()[[1]]
company_names <- read_html(page_source) %>% html_nodes(".company_name") %>% html_text()
print(company_names)

# 关闭浏览器与驱动
remDr$close()
driver$server$stop()

注意事项

  • 调用API时,若参数失效,可通过浏览器开发者工具的「网络」面板查看最新请求参数;
  • 使用RSelenium时,需确保浏览器驱动版本与本地浏览器版本匹配。

内容的提问来源于stack exchange,提问作者Shehroz Malik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:15:37