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

使用R(httr)批量获取PubMed文献摘要的问题求助

问题核心原因

你遇到的报错根本原因是构造请求URL时没有正确传入变量值,而是直接把变量名作为字符串写进了URL里,接口拿到的id参数是pmids或idc这几个字符串,不是你实际获取的PMID列表,因此判定ID为空。

PubMed的efetch接口完全支持一次性传入多个ID查询,单次请求最多支持200个ID,不需要循环逐个发送。


修正后的完整可运行脚本

library(httr)
library(glue)
library(xml2)
library(dplyr)

# 1. 构造检索请求获取PMID列表
reqq <- "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]&usehistory=y"
op <- GET(reqq)

pmids <- op %>% 
  read_xml() %>% 
  xml_find_all("//IdList/Id") %>% 
  xml_text()

# 2. 构造efetch请求获取文献元数据
# 直接拼接逗号分隔的ID串即可,不需要额外加引号再删除
id_str <- paste(pmids, collapse = ",")
# 用glue把ID变量正确插入URL中
reqq1 <- glue("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id={id_str}&rettype=abstract&retmode=xml")
op1 <- GET(reqq1)

# 3. 解析XML生成目标数据框
xml_content <- read_xml(op1)
pubs <- xml_find_all(xml_content, "//PubmedArticle")

result_df <- lapply(pubs, function(pub) {
  # 提取文章标题
  title <- xml_find_first(pub, ".//ArticleTitle") %>% xml_text()
  # 提取摘要,部分文献无公开摘要,做缺失值处理避免报错
  abstract <- xml_find_first(pub, ".//AbstractText") %>% 
    {ifelse(length(.) > 0, xml_text(.), NA_character_)}
  return(tibble(title = title, abstract = abstract))
}) %>% bind_rows()

补充说明

  • 如果你的PMID数量超过200个,自行切割成每200个一组分批请求即可,不需要逐个循环
  • 代码已经对无摘要的文献做了兼容处理,不会因为缺失值中断运行

内容的提问来源于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 10:57:03