Téléchargement d'images à l'aide du module de requêtes en Python
Dans le but de télécharger et d'enregistrer une image à partir du Web à l'aide du module de requêtes, un développeur rencontre des difficultés. Le code fourni fonctionne initialement, mais le code modifié à l'aide des requêtes entraîne une erreur.
L'erreur est due à l'utilisation d'un attribut incorrect de la réponse à la requête. Pour réussir à récupérer l'image à l'aide de requêtes, il existe deux options :
Utiliser l'objet de fichier Response.raw
L'utilisation de l'attribut Response.raw renvoie les données brutes du réponse. Le décodage des réponses compressées (par exemple, en utilisant GZIP ou deflate) n'est pas géré automatiquement. Pour forcer la décompression, définissez l'attribut decode_content sur True. Ensuite, utilisez shutdown.copyfileobj() pour diffuser les données vers un objet fichier.
import requests import shutil r = requests.get(settings.STATICMAP_URL.format(**data), stream=True) if r.status_code == 200: with open(path, 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f)
Itérer sur la réponse
Une approche alternative consiste à itérer sur la réponse , qui garantit la décompression des données.
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True) if r.status_code == 200: with open(path, 'wb') as f: for chunk in r: f.write(chunk)
La personnalisation de la taille du fragment est possible à l'aide de Response.iter_content() méthode.
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True) if r.status_code == 200: with open(path, 'wb') as f: for chunk in r.iter_content(1024): f.write(chunk)
N'oubliez pas d'ouvrir le fichier de destination en mode binaire pour empêcher la traduction de nouvelle ligne et de définir stream=True pour éviter les téléchargements complets gourmands en mémoire.
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!