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

使用R抓取PubChem化合物同义词:html_nodes定位器选择遇阻

解决PubChem化合物同义词批量抓取问题

为啥直接用rvest抓网页会失败?因为PubChem的页面内容很多是JavaScript动态加载的,read_html()只能拿到静态的HTML骨架,根本抓不到动态渲染出来的同义词数据,你试的那些CSS选择器自然也找不到内容。

最靠谱的方案是用PubChem官方提供的REST API,比网页抓取稳定得多,还支持批量操作,代码实现也简单:

单化合物同义词抓取代码

library(httr)
library(jsonlite)

get_pubchem_synonyms <- function(cid) {
  # 拼接API请求地址
  api_url <- paste0("https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/", cid, "/synonyms/JSON")
  
  # 发送请求并处理响应
  resp <- GET(api_url)
  if (http_status(resp)$category != "Success") {
    warning(paste("CID", cid, "请求出错"))
    return(NULL)
  }
  
  # 解析JSON数据并提取同义词
  json_result <- fromJSON(content(resp, "text"))
  synonyms <- json_result$InformationList$Information$Synonyms[[1]]
  return(synonyms)
}

# 测试单个CID(比如你提供的440917)
get_pubchem_synonyms(440917)

批量抓取实现

# 准备要查询的CID列表
target_cids <- c(440917, 1071, 2244)

# 批量获取同义词,返回以CID命名的列表
batch_results <- lapply(target_cids, get_pubchem_synonyms)
names(batch_results) <- target_cids

# 查看结果
batch_results

为啥优先用API?

  • 不会因为PubChem网页改布局就失效,稳定性拉满
  • 支持批量请求,比循环抓网页效率高很多
  • 返回的是结构化JSON数据,解析起来比HTML简单
  • 完全符合官方使用规则,不用担心被反爬拦截

如果非要坚持网页抓取,得用能处理JS渲染的工具(比如RSelenium或者playwright),但这种方案维护成本高,不如API省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:54:09