如何通过Scopus或Orcid API获取科研人员h-index时间序列
自动化获取科研人员h-index时间序列实现方案
前置准备
- 申请Scopus API密钥,在Elsevier开发者平台即可申请,免费额度可满足普通科研场景使用
- 安装依赖库:
pip install pybliometrics,该库为Scopus API的官方维护Python封装,可省略原生接口请求开发成本
核心实现逻辑
h-index时间序列的计算逻辑为:拉取学者全部发表论文的发表年份、累计引用数据,按年份从小到大累加论文及引用数据,逐年度计算对应时间节点的h-index值。
代码示例
from pybliometrics.scopus import AuthorRetrieval, ScopusSearch import pandas as pd def get_yearly_hindex(scopus_id: str): # 初始化学者信息查询 author = AuthorRetrieval(scopus_id) # 拉取该学者所有收录的论文数据 paper_query = ScopusSearch(f"AU-ID({scopus_id})", download=True) papers = paper_query.results paper_data = [] for p in papers: # 过滤无发表时间、无引用统计的无效数据 if not p.coverDate or p.citedby_count is None: continue pub_year = int(p.coverDate.split("-")[0]) paper_data.append((pub_year, int(p.citedby_count))) # 按发表年份排序 paper_data.sort(key=lambda x: x[0]) start_year = min(i[0] for i in paper_data) end_year = max(i[0] for i in paper_data) yearly_hindex = [] for year in range(start_year, end_year + 1): # 取当年及之前发表的所有论文的引用数 citations = [i[1] for i in paper_data if i[0] <= year] citations.sort(reverse=True) # 计算当前节点h-index current_h = 0 for idx, cite_num in enumerate(citations, 1): if cite_num >= idx: current_h = idx else: break yearly_hindex.append({"年份": year, "h-index": current_h}) return pd.DataFrame(yearly_hindex) # 调用示例,替换参数为目标学者的Scopus ID result = get_yearly_hindex("你的目标Scopus ID") # 可直接导出为csv文件 # result.to_csv("h指数时间序列.csv", index=False) print(result)
功能扩展
- 如需通过Scopus ID获取关联的ORCID,直接读取
author.orcid属性即可获取,无需额外请求 - 没有Scopus API权限的情况下可替换为OpenAlex公开API实现相同逻辑,不需要申请密钥即可调用
注意事项
- 首次运行pybliometrics会自动触发配置引导,按提示输入申请到的API密钥即可,后续运行无需重复输入
- 可通过调整ScopusSearch的查询参数过滤掉撤回论文、预印本等不需要统计的文献类型
内容的提问来源于stack exchange,提问作者robertspierre
相关产品推荐
相关产品推荐

