Заявление об ограничении ответственности: Я не эксперт в области HTTP или библиотеки запросов и раньше не использовал neuroomorpho.org , поэтому, пожалуйста, возьмите это с скепсис.
Вы можете запросить количество страниц с первым запросом, а затем l oop через отдельные страницы. В l oop вы должны включить запрашиваемую страницу в качестве параметра HTTP-метода GET, например ?page=42&...
, например:
url = 'http://neuromorpho.org/api/neuron/select'
params = {
'page' : 0,
'q' : 'species:rat',
'fq' : [
'brain_region:hippocampus,CA1',
'experiment_condition:Control',
'cell_type:Pyramidal,principal cell' ] }
totalPages = requests.get(url, params).json()['page']['totalPages']
df_dict = {
'NeuronID' : list(),
'Archive' : list(),
'Strain' : list(),
'Cell' : list(),
'Region' : list() }
for pageNum in range(totalPages):
params['page'] = pageNum
response = requests.get(url, params)
print('Querying page {} -> status code: {}'.format(
pageNum, response.status_code))
if (response.status_code == 200): #only parse successful requests
data = response.json()
for row in data['_embedded']['neuronResources']:
df_dict['NeuronID'].append(str(row['neuron_id']))
df_dict['Archive'].append(str(row['archive']))
df_dict['Strain'].append(str(row['strain']))
df_dict['Cell'].append(str(row['cell_type']))
df_dict['Region'].append(str(row['brain_region']))
rat_df = pd.DataFrame(df_dict)
print(rat_df)
. Вы можете увидеть результат DataFrame
и то, как запрошенные изменения номера страницы в выводе консоли:
Querying page 0 -> status code: 200
Querying page 1 -> status code: 200
Querying page 2 -> status code: 200
Querying page 3 -> status code: 200
Querying page 4 -> status code: 200
Querying page 5 -> status code: 200
Querying page 6 -> status code: 200
Querying page 7 -> status code: 200
Querying page 8 -> status code: 200
Querying page 9 -> status code: 200
Querying page 10 -> status code: 200
Querying page 11 -> status code: 200
Querying page 12 -> status code: 200
Querying page 13 -> status code: 200
Querying page 14 -> status code: 200
Querying page 15 -> status code: 200
Querying page 16 -> status code: 200
Querying page 17 -> status code: 200
Querying page 18 -> status code: 200
Querying page 19 -> status code: 200
Querying page 20 -> status code: 200
Querying page 21 -> status code: 200
Querying page 22 -> status code: 200
NeuronID Archive Strain Cell Region
0 100 Turner Fischer 344 ['pyramidal', 'principal cell'] ['hippocampus', 'CA1']
1 101 Turner Fischer 344 ['pyramidal', 'principal cell'] ['hippocampus', 'CA1']
2 1016 Ascoli Sprague-Dawley ['pyramidal', 'principal cell'] ['hippocampus']
3 1019 Ascoli Sprague-Dawley ['pyramidal', 'principal cell'] ['hippocampus']
4 102 Turner Fischer 344 ['pyramidal', 'principal cell'] ['hippocampus', 'CA1']
... ... ... ... ... ...
1110 99614 Guizzetti Sprague-Dawley ['principal cell', 'pyramidal'] ['hippocampus', 'CA1', 'left']
1111 99615 Guizzetti Sprague-Dawley ['principal cell', 'pyramidal'] ['hippocampus', 'CA1', 'left']
1112 99616 Guizzetti Sprague-Dawley ['principal cell', 'pyramidal'] ['hippocampus', 'CA1', 'left']
1113 99617 Guizzetti Sprague-Dawley ['principal cell', 'pyramidal'] ['hippocampus', 'CA1', 'left']
1114 99618 Guizzetti Sprague-Dawley ['principal cell', 'pyramidal'] ['hippocampus', 'CA1', 'left']
[1115 rows x 5 columns]
Обновление # 1:
Я изменил свой опубликованный код, добавив модифицированную версию вашего кода для анализа ответов в l oop. Я думаю, что есть небольшая ошибка в API neuroomorpho.org , так как он отвечает size: 50
для последней страницы (номер 22), в то время как он содержит только 15 (индекс 0-14) объектов в JSON ответ. Вы можете обойти эту проблему, перебирая объект JSON и пренебрегая сообщаемым размером.
Обновление № 2:
Понятно, что параметры GET не нужно кодировать в URL но этот Requests делает это за нас, передавая их как dict
(обновленный код).
Надеюсь, это поможет!