Python accède efficacement à l'API HTTP: Demande la bibliothèque et le cache de demande
Cet article est extrait de "Practical Python", et l'auteur Stuart montre comment accéder facilement à l'API HTTP à l'aide de Python et de plusieurs modules tiers.
La plupart des cas, le traitement des données tierces nécessite un accès à l'API HTTP, c'est-à-dire l'envoi de demandes HTTP aux pages Web conçues pour être lues par les machines plutôt que manuellement. Les données de l'API sont généralement dans un format lisible par machine, généralement en JSON ou en XML. Voyons comment accéder à l'API HTTP à l'aide de Python.
Les principes de base de l'utilisation de l'API HTTP sont simples:
La bibliothèque standard Python fournit suffisamment de fonctions pour faire tout cela sans modules supplémentaires, mais cela facilitera notre travail si nous utilisons plusieurs modules tiers pour simplifier le processus. Le premier est le module requests
. Il s'agit d'une bibliothèque HTTP pour Python qui rend l'obtention de données HTTP plus pratique que Python intégrée urllib.request
et peut être installée à l'aide de python -m pip install requests
.
Pour montrer sa facilité d'utilisation, nous utiliserons l'API de Pixabay (documentée ici). Pixabay est un site Web d'image où toutes les images peuvent être réutilisées, ce qui en fait une ressource très pratique. Nous nous concentrerons sur les photos des fruits. Plus tard lors de la manipulation du fichier, nous utiliserons les photos de fruits collectées, mais maintenant nous voulons juste trouver les photos des fruits.
Tout d'abord, nous verrons rapidement quelles photos sont disponibles sur Pixabay. Nous prendrons une centaine de photos, les naviguerons rapidement et sélectionnerons celle que nous voulons. Pour ce faire, nous avons besoin d'une clé API Pixabay, nous devons donc créer un compte, puis obtenir la clé de la section d'image de recherche du document API.
Les versions de base de l'utilisation du module requests
pour faire des demandes HTTP à l'API comprennent la création d'URL HTTP, la création de demandes et les réponses de lecture. Ici, la réponse est au format JSON. Le module requests
rend chaque étape très simple. Le paramètre API est un dictionnaire Python, et la fonction get()
fait un appel. Par conséquent, un appel simple ressemble à ceci: requests
.json
import requests PIXABAY_API_KEY = "11111111-7777777777777777777777777" base_url = "https://pixabay.com/api/" base_params = { "key": PIXABAY_API_KEY, "q": "fruit", "image_type": "photo", "category": "food", "safesearch": "true" } response = requests.get(base_url, params=base_params) results = response.json()
Pour obtenir une centaine de résultats, nous pouvons simplement décider de passer cinq appels, chacun obtenant 20 résultats, mais ce n'est pas assez robuste. Une meilleure approche consiste à parcourir la page de demande jusqu'à ce que vous obteniez les cent résultats souhaités, puis arrêtez. Cela empêche les problèmes lorsque Pixabay modifie le nombre par défaut de résultats (par exemple à 15). Il nous permet également de gérer la situation où les termes de recherche n'ont pas une centaine d'images. Nous utilisons donc une boucle while
, incrémentant le numéro de page à chaque fois, et si nous avons atteint 100 images, ou il n'y a pas d'image à récupérer, nous quittons la boucle:
C'est une bonne idée d'éviter de faire les mêmes demandes à l'API HTTP plusieurs fois. De nombreuses API ont des restrictions d'utilisation pour éviter la surutilisation des demandeurs, et les demandes prennent du temps et des efforts. Nous devons essayer d'éviter de dupliquer les demandes précédentes. Heureusement, il existe un moyen utile de le faire lors de l'utilisation du module requests
de Python: installer python -m pip install requests-cache
en utilisant requests-cache
. Cela enregistrera parfaitement tous les appels HTTP que nous passons et enregistrera les résultats. Ensuite, plus tard, si nous réalisons à nouveau le même appel, nous obtenons le résultat enregistré localement sans avoir à accéder à nouveau à l'API. Cela fait gagner du temps et de la bande passante. Pour utiliser requests_cache
, importez-le et créez un CachedSession
puis utilisez session.get
au lieu de requests.get
pour obtenir l'URL, nous obtiendrons les avantages de la mise en cache sans effort supplémentaire:
Afin de visualiser les résultats de la requête, nous devons afficher l'image quelque part. Un moyen pratique consiste à créer une page HTML simple pour afficher chaque image. Pixabay fournit de petites miniatures pour chaque image, appelée previewURL
dans la réponse de l'API, afin que nous puissions créer une page HTML pour afficher toutes ces miniatures et les lier à la page Pixabay principale - à partir de laquelle nous pouvons choisir télécharger les images que nous Je veux et signer le photographe. Par conséquent, chaque image de la page peut ressembler à ceci:
Nous pouvons le construire à partir de la liste images
en utilisant la compréhension de la liste, puis utiliser "n".join()
pour concaténer tous les résultats en une grande chaîne:
Ensuite, si nous écrivons une page HTML très simple avec cette liste, il est facile de l'ouvrir dans un navigateur Web, affichez rapidement tous les résultats de recherche que nous obtenons de l'API et cliquez sur l'un d'eux pour sauter le téléchargement en complet Page Pixabay:
Cet article est extrait de Practical Python et peut être acheté chez SitePoint Premium et les détaillants de livres électroniques.
(Voici les FAQ, qui ont été réécrites et rationalisées selon le texte d'origine)
Des questions fréquemment posées sur l'obtention de données avec l'API HTTP de Python (FAQ)
Quelle est la différence entre HTTP et HTTPS? HTTP est un protocole de transfert hypertexte, et HTTPS est un protocole de transfert hypertexte sécurisé. La principale différence est que HTTPS utilise des certificats SSL pour établir une connexion cryptée sécurisée entre le serveur et le client, contrairement à HTTP. Cela rend HTTPS plus sécurisé lors du transfert de données sensibles telles que les informations de carte de crédit ou les informations d'identification de connexion.
Comment fonctionne HTTP dans Python? Plusieurs bibliothèques peuvent être utilisées dans Python pour émettre des demandes HTTP, la plus couramment utilisée est requests
. Cette bibliothèque vous permet d'envoyer des demandes HTTP et des réponses de processus, y compris le traitement des cookies, des données de formulaire, des fichiers en plusieurs parties, etc. Il s'agit d'un outil puissant pour interagir avec les services Web et peut être utilisé dans une variété d'applications.
Quelles sont les méthodes HTTP courantes? Comment les utiliser dans Python? Les méthodes HTTP les plus courantes sont Get, Publier, Post, Supprimer, Head, Options et Patch. Dans Python, vous pouvez utiliser la bibliothèque requests
pour utiliser ces méthodes. Par exemple, pour envoyer une demande GET, vous pouvez utiliser requests.get(url)
, et pour envoyer une demande de message, vous pouvez utiliser requests.post(url, data)
.
Comment gérer les réponses HTTP dans Python? Lorsque vous utilisez la bibliothèque requests
pour envoyer des demandes HTTP dans Python, vous obtenez un objet de réponse. Cet objet contient la réponse du serveur à votre demande. Si la réponse est au format JSON, vous pouvez utiliser response.text
ou response.json()
pour accéder au contenu de la réponse. Vous pouvez également utiliser response.status_code
pour vérifier le code d'état de la réponse.
Comment utiliser des en-têtes HTTP dans Python? Vous pouvez les utiliser dans Python en passant des en-têtes HTTP comme dictionnaire au paramètre requests
de la fonction headers
. Par exemple, requests.get(url, headers={'User-Agent': 'my-app'})
. L'en-tête peut être utilisé pour fournir des informations supplémentaires sur la demande ou le client, telles que l'agent utilisateur, le type de contenu, l'autorisation, etc.
Comment gérer les cookies dans Python? Les cookies peuvent être traités dans Python à l'aide de l'attribut cookies
de l'objet de réponse. Vous pouvez accéder aux cookies envoyés par le serveur à l'aide de response.cookies
et envoyer les cookies au serveur en les passant sous forme de dictionnaire au paramètre requests
de la fonction cookies
.
Comment envoyer des données de formulaire à l'aide de la demande post-demande dans Python? Il peut être envoyé à l'aide d'une demande de post dans Python en passant les données de forme en tant que dictionnaire au paramètre requests.post
de la fonction data
. Par exemple, requests.post(url, data={'key': 'value'})
. La bibliothèque requests
codera automatiquement les données au format correct.
Comment envoyer un fichier à l'aide de la demande de post dans Python? Les fichiers peuvent être envoyés à l'aide de requêtes de post dans Python en les faisant passer en tant que dictionnaire au paramètre requests.post
de la fonction files
. Le dictionnaire doit contenir le nom du champ de fichier comme clé et le tuple contenant le nom de fichier et l'objet de fichier comme valeurs.
Comment gérer les erreurs et les exceptions de la bibliothèque requests
dans Python? La bibliothèque requests
dans Python lance des exceptions pour certains types d'erreurs, telles que les erreurs de réseau ou les délais d'attente. Vous pouvez utiliser le bloc d'essai / sauf pour prendre ces exceptions et les gérer de manière appropriée. Vous pouvez également vérifier le code d'état de la réponse pour gérer les erreurs HTTP.
Comment faire une demande HTTP asynchrone dans Python? Vous pouvez utiliser la bibliothèque aiohttp
pour émettre des demandes HTTP asynchrones dans Python. Cette bibliothèque vous permet d'envoyer des demandes HTTP de manière asynchrone et de traiter les réponses, ce qui peut améliorer considérablement les performances de votre application lors de la gestion d'un grand nombre de demandes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!