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.
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
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