You need to enable JavaScript to run this app. R语言中使用rscopus包循环遍历ID列表批量获取Scopus作者数据
优惠活动
大模型
产品
解决方案
定价
更多

R语言中使用rscopus包循环遍历ID列表批量获取Scopus作者数据

Scopus作者数据批量拉取通用实现

你只需要把所有待查询的作者ID统一维护在一个独立的列表里,后续新增查询对象时,只需要往这个列表里补ID,完全不需要修改后面的查询、合并逻辑,就能替代之前手动逐行写df1、df2的冗余操作。

基础固定配置

先把不变的前置配置写好,和你之前手动跑的逻辑完全兼容:

# 加载依赖包
library(rscopus)
library(dplyr)

# 替换为你自己的专属Scopus API密钥
Elsevier_API = "你的专属API密钥"
set_api_key(Elsevier_API)

# 所有待查询的作者ID统一存在这个向量中,后续新增ID直接按格式追加即可
au_id_list <- c(
  "35392031000",
  "35418453700",
  "后续新增的作者ID直接加在这个向量里,不用改动其他代码"
)

带容错的批量查询逻辑

新手写循环最容易碰到的问题是:某一个ID查询失败(比如ID无效、临时网络波动、API调用频率超限)会直接中断整个脚本,导致之前已经拉取的有效数据全部丢失。下面的写法做了基础的异常捕获,单条查询出错不会拖垮整个流程:

# 遍历ID列表执行查询,单条结果存入列表
all_author_data <- lapply(au_id_list, function(current_id) {
  # 单条查询包裹异常捕获逻辑
  tryCatch(
    # 和你之前单独调用的author_df参数完全一致,没有修改原逻辑
    author_df(au_id = current_id, verbose = FALSE, general = FALSE),
    # 查询出错时打印提示,返回空数据框,不中断流程
    error = function(err) {
      message(paste("ID为", current_id, "的作者数据拉取失败,错误原因:", err$message))
      data.frame()
    }
  )
})

# 纵向合并所有结果,生成最终的结构化数据框
df_final <- bind_rows(all_author_data)

可选优化:避免触发API频率限制

如果单次查询的ID数量比较多,可以在每次查询之间加个短延时,降低触发Scopus接口限流的概率,只需要在查询逻辑里加一行Sys.sleep()即可:

all_author_data <- lapply(au_id_list, function(current_id) {
  tryCatch({
    query_res <- author_df(au_id = current_id, verbose = FALSE, general = FALSE)
    Sys.sleep(0.5) # 每次查询完成后等待0.5秒
    query_res
  },
  error = function(err) {
    message(paste("ID为", current_id, "的作者数据拉取失败,错误原因:", err$message))
    data.frame()
  })
})

日常使用注意事项

  • 后续要新增查询的研究者ID,只需要追加到au_id_list向量中即可,不需要修改后面的查询、合并代码,真正实现通用逻辑
  • 由于Scopus接口需要绑定有效专属密钥,无有效密钥的环境运行代码会触发权限类报错,属于正常情况
  • 合并数据时如果不同作者的数据存在列名差异,bind_rows会自动对齐列、给缺失的位置补空值,不需要手动调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 11:24:03