получение всех записей с использованием REST API - PullRequest
0 голосов
/ 17 апреля 2020

Я знаю, что есть множество вопросов о разбиении на страницы REST API. У меня это немного по-другому.

Я написал этот скрипт, чтобы извлечь определенную информацию из этой страницы:

import requests
import json
import pandas as pd

url = 'http://data.rcsb.org/rest/v1/core/entry/5XTI'
r = requests.get(url)
json_data = json.loads(r.text)
print(json_data['rcsb_entry_info']['polymer_entity_count_protein'])

Однако на этом сайте> 250 000 записи (т.е. замена «5XTI» в URL на 250 000 других образцов), и я хочу, чтобы скрипт выполнялся на всех страницах (например, что-то вроде: http://data.rcsb.org/rest/v1/core/entry/* '); Есть ли обобщенный c способ сделать это (или он задает c для API?)

У меня не было бы списка всех идентификаторов, которые нужно было бы предварительно просмотреть (т.е. я могу ' просто составьте список из них всех и бегите по списку).

1 Ответ

0 голосов
/ 17 апреля 2020

Вы можете получить список всех идентификаторов PDB здесь . Так что просто потяните это и прочитайте это в свой l oop.

Также обратите внимание, что запросы включают json.loads(), поэтому вам не нужно делать это отдельно. Просто включите это в ваш requests.get()

import pandas as pd
import requests

url = "ftp://ftp.wwpdb.org/pub/pdb/derived_data/index/author.idx"
indexfile = pd.read_csv(url, skiprows=3,sep=";")

for pdb_id in list(indexfile['IDCODE']):
    url = 'http://data.rcsb.org/rest/v1/core/entry/%s' %pdb_id.strip()
    json_data = requests.get(url).json()

    count = json_data['rcsb_entry_info']['polymer_entity_count_protein']

    print('%s: %s' %(pdb_id, count))

Выход:

5G5D : 2
4BT2 : 1
4BT3 : 1
4BT4 : 1
4BT5 : 1
4BT6 : 1
4BT7 : 1
3V95 : 1
2PYH : 1
6F7E : 1
6SO0 : 1
6HFZ : 1
6HH9 : 1
2PYG : 1
2KV1 : 1
2L1U : 1
2LHS : 1
2ML1 : 1
2ML2 : 1
2ML3 : 1
2NPB : 1
2AGM : 1
5FOH : 1
5LW4 : 1
5LFO : 1
5LGB : 1
5MBX : 1
...
...