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

使用R的httr包调用PubMed API获取摘要的相关问题求助

问题解决方法

你现有代码的核心问题是仅发送了请求未对返回结果做XML解析,且请求参数拼接、响应处理环节存在疏漏,以下是修正后的完整可运行流程:

library(XML)
library(httr)
library(glue)

# 构造查询词,不需要手动拼接特殊符号,后续参数会自动处理编码
query <- 'asthma[mesh] AND leukotrienes[mesh] AND 2009[pdat]'

# 用httr内置的query参数传参,避免手动拼接URL导致的编码错误,稳定性更高
response <- GET(
  url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi",
  query = list(
    db = "pubmed",
    term = query,
    retmax = 100 # 可自定义返回结果数量,接口默认返回20条
  )
)

# 先校验请求状态,排除网络、参数错误导致的非预期返回
stop_for_status(response, "调用PubMed API")

# 先提取响应中的纯XML文本再解析,避免直接传入响应对象导致的解析错误
xml_content <- content(response, as = "text", encoding = "UTF-8")
parsed_xml <- xmlParse(xml_content)

# 提取PMID列表
pmids <- xpathSApply(parsed_xml, "//IdList/Id", xmlValue)

# 打印查看结果
print(pmids)

报错原因说明

你之前遇到的XML content does not seem to be XML以及标签不匹配报错,是因为直接将GET返回的响应对象传入解析函数,或者请求出错时NCBI返回了HTML格式的错误页,不是预期的XML格式,解析自然失败。上述代码先判断请求状态,再提取纯文本XML内容再解析,可完全解决该问题。

如果需要获取文献的详细信息,可以在拿到PMID后调用efetch接口实现,示例代码如下:

# 批量获取文献详情
fetch_response <- GET(
  url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi",
  query = list(
    db = "pubmed",
    id = paste(pmids, collapse = ","),
    rettype = "abstract", # 可修改为medline、xml等返回格式
    retmode = "text"
  )
)
stop_for_status(fetch_response, "获取文献详情")
abstracts <- content(fetch_response, as = "text", encoding = "UTF-8")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:51:02