通过SCOPUS API向Power BI Desktop获取作者文献仅返回25条的技术问题
解决Scopus API仅返回第一页数据的问题
默认分页限制说明:Scopus API默认每页仅返回25条数据,要获取全部800+篇文献,必须通过
start和count参数手动控制分页:count:设置单页最大返回数,上限为200,比默认值效率更高start:指定起始条目索引(从0开始),每次请求递增count的值,直到返回结果为空或覆盖总文献数
先获取总文献数:首次请求后,API返回的元数据中
totalResults字段会给出符合条件的总文献量,以此计算需要请求的总页数Power BI中实现分页的步骤:
- 打开Power BI高级编辑器,编写自定义Power Query M函数循环请求每一页数据
- 示例代码逻辑:
let apiKey = "7f59af901d2d86f78a1fd60c1bf9426a", baseUrl = "https://api.elsevier.com/content/search/scopus", query = "AU-ID(""56973530700"") OR AU-ID(""55911063200"") OR AU-ID(""36482638800"") OR AU-ID(""16318706200"") OR AU-ID(""20433698300"") OR AU-ID(""7003336314"") OR AU-ID(""56343679600"") OR AU-ID(""7402141385"") OR AU-ID(""9743731700"") OR AU-ID(""36166690800"") OR AU-ID(""7006406404"") OR AU-ID(""25521994200"") OR AU-ID(""7005832568"") OR AU-ID(""7003993398"") OR AU-ID(""57194492913"") OR AU-ID(""24279923300"") OR AU-ID(""7005533422"") OR AU-ID(""6603806362"") OR AU-ID(""7003737536"") OR AU-ID(""56458722000"") OR AU-ID(""7004890330"")", getPage = (start as number) => let url = baseUrl & "?query=" & Uri.EscapeDataString(query) & "&apiKey=" & apiKey & "&count=200&start=" & Text.From(start), response = Json.Document(Web.Contents(url)), results = response[search-results][entry] in results, totalResults = Json.Document(Web.Contents(baseUrl & "?query=" & Uri.EscapeDataString(query) & "&apiKey=" & apiKey))[search-results]["totalResults"], pageNumbers = List.Generate(() => 0, each _ < totalResults, each _ + 200), allPages = List.Transform(pageNumbers, getPage), combinedResults = List.Combine(allPages) in combinedResults - 注意事项:确保Power BI隐私设置允许访问外部API,同时控制请求频率,避免触发Scopus API的限流机制
额外优化点:原查询中部分作者ID带有前置空格(编码后为
%C2%A0),建议清理这些空格后重新查询,避免因ID匹配错误遗漏文献
内容的提问来源于stack exchange,提问作者Diego Reyes Marinissen
相关产品推荐
相关产品推荐

