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

使用pybliometrics获取共同作者时偶发Scopus500Error的原因及解决方法

Scopus500Error报错原因与解决方案

完整报错信息:

Traceback (most recent call last):
File "G:\dissertationdatabase\iteration3\iteration3.py", line 16, in <module>
    coauthors = pd.DataFrame(au.get_coauthors())

  File "C:\ProgramData\Miniconda3\lib\site-packages\pybliometrics\scopus\author_retrieval.py", line 289, in get_coauthors
    res = get_content(url, api="AuthorSearch")

  File "C:\ProgramData\Miniconda3\lib\site-packages\pybliometrics\scopus\utils\get_content.py", line 97, in get_content
    raise errors[resp.status_code](reason)

Scopus500Error: Error calling Solr Search Service

报错原因

  • 服务端临时异常:500级错误属于服务端内部错误,和本地代码逻辑无关,偶发的核心原因是Scopus服务器瞬时负载过高、接口内部调用超时、后台临时维护,所以会出现有时正常运行、有时报错的随机现象。
  • 请求触发服务端隐性限制:如果查询的作者发文量极大、单次请求需要检索的数据量超过服务端内置阈值,就有可能触发Solr搜索服务的异常分支,返回该报错。

解决方案

  • 新增异常重试逻辑:在调用get_coauthors()的外层增加异常捕获和重试机制,设置合理的重试间隔和次数,参考代码如下:
import time
import pandas as pd
from pybliometrics.scopus.exception import Scopus500Error

max_retry = 3
retry_count = 0
coauthors = None
while retry_count < max_retry:
    try:
        coauthors = pd.DataFrame(au.get_coauthors())
        break
    except Scopus500Error:
        retry_count += 1
        time.sleep(3) # 每次重试间隔3秒,可自行调整
        if retry_count == max_retry:
            raise
  • 降低请求速率:如果是批量查询多名作者的共同作者,在两次请求之间加1-2秒的等待时间,避免短时间内请求量过大触发服务端负载过高。
  • 拆分大数据量请求:如果查询的作者发文量超过1000篇,可以先按年份分段查询该作者的论文,再分段统计共同作者后合并,避免单次请求处理数据量过大触发报错。
  • 更换运行时间段:如果工作日频繁报错,可以选择Scopus服务负载较低的时段(非工作日、欧美地区深夜时段)运行脚本,可大幅降低偶发服务端错误的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:15:11