Maison >développement back-end >Tutoriel Python >Comment télécharger correctement des images à l'aide du module « requests » de Python ?

Comment télécharger correctement des images à l'aide du module « requests » de Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-11 18:06:17768parcourir

How to Properly Download Images Using Python's `requests` Module?

Téléchargement d'images avec le module de requêtes de Python

Lorsque vous essayez de télécharger une image depuis Internet à l'aide du module de requêtes de Python, vous pouvez rencontrer des problèmes avec le code par rapport à l'utilisation de l'urlopen d'urllib2. méthode. Cet article aborde ces défis et propose des solutions.

Code original de référence

img = urllib2.urlopen(settings.STATICMAP_URL.format(**data))
with open(path, 'w') as f:
    f.write(img.read())

Nouveau code de référence

r = requests.get(settings.STATICMAP_URL.format(**data))
if r.status_code == 200:
    img = r.raw.read()
    with open(path, 'w') as f:
        f.write(img)

Problème

Le problème se produit lors de l'utilisation de requêtes car l'attribut de la réponse qui contient les données d'image est différent de celui de urlopen dans urllib2.

Solution

Pour récupérer les données d'image de la réponse à la requête, il existe deux options :

  1. Utiliser l'objet fichier réponse.raw : Cette méthode nécessite de définir decode_content sur True, puis de diffuser les données dans un fichier object :
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)        
  1. Itération sur la réponse :Cette méthode garantit que les requêtes décodent les données pendant l'itération :
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)

En définissant stream=True dans l'appel de requêtes, cela empêche le téléchargement simultané de l'image entière en mémoire. Le fichier doit être ouvert en mode binaire pour éviter les erreurs.

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