web-dev-qa-db-fra.com

Python demande des arguments / traite de la pagination api

Je joue avec l'API Angel List (AL) et je souhaite supprimer tous les emplois à San San Francisco. Comme je n'ai pas pu trouver un Python pour l'api (si je fais des progrès, je pense que j'aimerais faire le mien), j'utilise la bibliothèque de demandes.

Les résultats de l'API AL sont paginés, et je ne peux pas comprendre comment aller au-delà de la première page des résultats.

Voici mon code:

import requests
r_sanfran = requests.get("https://api.angel.co/1/tags/1664/jobs").json()
r_sanfran.keys()
# returns [u'per_page', u'last_page', u'total', u'jobs', u'page']
r_sanfran['last_page']
#returns 16
r_sanfran['page']
# returns 1

J'ai essayé d'ajouter des arguments à requests.get, mais cela n'a pas fonctionné. J'ai également essayé quelque chose de vraiment stupide - changer la valeur de la touche 'page' comme ça allait magiquement paginer pour moi.

par exemple. r_sanfran['page'] = 2

Je suppose que c'est quelque chose de relativement simple, mais je n'arrive pas à le comprendre, donc toute aide serait géniale.

Merci comme toujours.

documentation de l'API Angel List si c'est utile.

20
crock1255

Lis last_page et faites une demande d'obtention pour chaque page de la plage:

import requests

r_sanfran = requests.get("https://api.angel.co/1/tags/1664/jobs").json()
num_pages = r_sanfran['last_page']

for page in range(2, num_pages + 1):
    r_sanfran = requests.get("https://api.angel.co/1/tags/1664/jobs", params={'page': page}).json()
    print r_sanfran['page']
    # TODO: extract the data
20
alecxe

Amélioration de la réponse de @ alecxe: si vous utilisez un générateur Python et une session HTTP de requêtes, vous pouvez améliorer les performances et l'utilisation des ressources si vous interrogez de nombreuses pages ou de très grandes pages.

import requests

session = requests.Session()

def get_jobs():
    url = "https://api.angel.co/1/tags/1664/jobs" 
    first_page = session.get(url).json()
    yield first_page
    num_pages = first_page['last_page']

    for page in range(2, num_pages + 1):
        next_page = session.get(url, params={'page': page}).json()
        yield next_page

for page in get_jobs():
    # TODO: process the page
10
dh762