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

如何使用rvest正确提取gnomad数据库中的变异位点ID信息

问题根因
  • gnomad 是基于React构建的动态单页应用,rvest::read_html() 仅能抓取服务端返回的初始静态HTML骨架,你要的变异列表数据是页面在浏览器端加载完成后,通过JavaScript异步请求接口动态渲染的,静态抓取到的源码里根本不存在对应的变异节点,无论怎么调整CSS选择器、XPath表达式都无法匹配到内容。
  • 你通过selectorgadget获取的.cmvTB、.bxQxTC属于前端工程化打包时生成的随机混淆类名,没有固定语义,站点迭代发布后类名就会变化,本身就不适合作为爬取定位的依据。
可行方案

最稳定高效的方式是直接调用gnomad自带的公开GraphQL接口取数,不需要依赖无头浏览器渲染页面,可直接拿到结构化的变异数据,参考代码如下:

library(httr)
library(jsonlite)

# 构造GraphQL查询语句
gql_query <- '
query GetRegionVariants($chrom: String!, $start: Int!, $end: Int!, $dataset: DatasetId!) {
  region(chrom: $chrom, start: $start, stop: $end) {
    variants(dataset: $dataset) {
      variant_id
    }
  }
}
'

# 发起接口请求
api_resp <- POST(
  url = "https://gnomad.broadinstitute.org/api/",
  body = list(
    query = gql_query,
    variables = list(
      chrom = "1",
      start = 55516868,
      end = 55516908,
      dataset = "gnomad_r3"
    )
  ),
  encode = "json"
)

# 解析返回结果
resp_data <- fromJSON(content(api_resp, as = "text"), flatten = TRUE)
variant_list <- resp_data$data$region$variants$variant_id

运行代码后variant_list即为目标变异ID向量,完全匹配你预期的4个结果:1-55516880-T-C、1-55516902-T-G、1-55516903-G-GC、1-55516905-C-CT。

如果必须通过页面解析的方式获取数据,需要使用chromote、RSelenium这类可驱动真实浏览器的工具,等待页面JS渲染完成后再提取节点,但这类方案效率低、易受页面变动影响,不推荐使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:54:33