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
Libérer: 2024-12-11 18:06:17
original
698 Les gens l'ont consulté

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())
Copier après la connexion

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)
Copier après la connexion

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)        
Copier après la connexion
  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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal