我正在尝试从 python 中的 Europe PMC 注释 api 获取批量数据

I'm trying to get bulk data from Europe PMC annotations api in python

我的密码是

if name == 'main': json_data=requests.get("https://www.ebi.ac.uk/europepmc/annotations_api/annotationsByArticleIds?articleIds=PMC%3A4771370§ion=Abstract&provider=Europe%20PMC&format=JSON").content r=json.loads(json_data) df = json_to_dataframe(r) 打印(df)

我唯一的问题是如何 运行 这对于多个 ID,就像我在一个文件中至少有数千个 ID。 请帮助我使用 python.

假设您知道 Python 并且可以将文件中的所有 ID 放入列表 article_ids,您可以使用以下脚本:

URL = 'https://www.ebi.ac.uk/europepmc/annotations_api/annotationsByArticleIds'

article_ids = ['PMC:4771370']

for article_id in article_ids:
    params = {
        'articleIds': article_id,
        'section': 'Abstract',
        'provider': 'Europe PMC',
        'format': 'JSON'
    }
    json_data = requests.get(URL, params=params).content
    r = json.loads(json_data)
    df = json_to_dataframe(r)
    print(df)

分析共享 URL 并阅读 URL Encodings article 后, 我观察到 annotationByArticleIDs 的每个值都具有 SOURCE:EXTERNAL_ID 格式的格式。

测试 1: 如果你点击 url:

https://www.ebi.ac.uk/europepmc/annotations_api/annotationsByArticleIds?articleIds=PMC

输出为: 它必须包含格式为 SOURCE:EXTERNAL_ID 的值,其中 SOURCE 必须具有以下值之一 [PMC、MED、PAT、AGR、CBA、HIR、CTX、ETH、CIT、PPR、NBK] 并且 EXTERNAL_ID 必须当 SOURCE=PMC

时是一个数字
  • 以上输出显示了可能的来源列表
  • 每个来源由 EXTERNAL_ID 使用冒号分隔
  • 冒号在URL编码文章
  • 中由%3A表示
  • 为了将一对值与另一对值分开,您可以使用逗号运算符
  • 逗号在同一篇URL编码文章中使用%2C表示

答案:因此,要获取多篇文章,您可以生成格式为 SOURCE1:EXTERNAL_ID1、SOURCE2:EXTERNAL_ID2 .... SOURCE3:EXTERNAL_ID3 的文章 ID 字符串,然后追加到主url

一些限制:

  • 最大URL 长度可以是 2048 个字符
  • 根据可能的 ID,您将能够获取大约 150 到 200 篇文章
  • 您可以遍历一批 150 个,然后获取所需的信息