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

PyAlex Authors()是否支持多Author ID传入并返回多对象?批量查询优化求助

高效批量查询OpenAlex作者姓名的方法

我有一个包含400k个OpenAlex Author ID的DataFrame,想要获取每个ID对应的作者姓名(名和姓)。目前每次仅向Authors()类传入单个Author ID,从响应中提取display_name字段,但这种方式速度极慢、效率低下——毕竟要发起400k次请求。我想找更高效的批量查询方法,但官方README没给出有效帮助。当前实现代码如下:

pyalex.config.email = "my_email@gmail.com"
pyalex.config.max_retries = 3
pyalex.config.retry_backoff_factor = 0.1

for row in range(len(data["openalex_id"])):
    name = Authors()[data.loc[row, "openalex_id"]]["display_name"]
    data.loc[row, "Name_Surname"] = name

优化方案

OpenAlex支持批量查询,结合pyalex的特性可以大幅减少请求次数,提升效率:

  • 利用OpenAlex的批量筛选能力:OpenAlex允许通过filter参数单次传入最多200个作者ID,将400k个ID按200个一组拆分,请求次数可从400k降至2000次。
  • 使用pyalex的批量查询接口:pyalex的Authors()类支持通过filter(id=批量ID列表)的方式发起查询,再通过.get()获取所有结果。

优化后的代码示例

import pyalex

pyalex.config.email = "my_email@gmail.com"
pyalex.config.max_retries = 3
pyalex.config.retry_backoff_factor = 0.1

# 单次批量查询的最大ID数量(OpenAlex限制)
BATCH_SIZE = 200

# 获取所有作者ID列表
author_ids = data["openalex_id"].tolist()

# 分批处理ID
for idx in range(0, len(author_ids), BATCH_SIZE):
    # 截取当前批次的ID
    batch = author_ids[idx:idx+BATCH_SIZE]
    # 批量查询作者信息
    author_results = pyalex.Authors().filter(id=batch).get()
    # 构建ID与姓名的映射字典
    name_mapping = {item["id"]: item["display_name"] for item in author_results}
    # 批量更新DataFrame中的姓名字段
    data.loc[data["openalex_id"].isin(batch), "Name_Surname"] = data["openalex_id"].map(name_mapping)

注意事项

  • 遵守API配额:配置邮箱后OpenAlex会提供更高的请求配额,避免触发限流;如果遇到限流,可以适当调大retry_backoff_factor的值。
  • 处理无效ID:部分ID可能不存在于OpenAlex数据库中,可通过fillna()方法为这些条目设置默认值(如data["Name_Surname"] = data["Name_Surname"].fillna("未知"))。
  • 进度跟踪:可以引入tqdm库为循环添加进度条,方便查看处理进度:
    from tqdm import tqdm
    for idx in tqdm(range(0, len(author_ids), BATCH_SIZE)):
        # 原有批量处理代码
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:12:42