Maison >développement back-end >Tutoriel Python >Comment télécharger efficacement des images avec le module de requêtes de Python ?

Comment télécharger efficacement des images avec le module de requêtes de Python ?

DDD
DDDoriginal
2024-12-18 10:19:13280parcourir

How to Efficiently Download Images with Python's Requests Module?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn