Maison >développement back-end >Tutoriel Python >Comment télécharger efficacement des images à l'aide de la bibliothèque de requêtes de Python ?

Comment télécharger efficacement des images à l'aide de la bibliothèque de requêtes de Python ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-02 22:12:411047parcourir

How to Efficiently Download Images Using Python's Requests Library?

Télécharger des images avec des requêtes

Télécharger des images à partir du Web à l'aide du module de requêtes de Python peut être une tâche simple. Cependant, lors du passage de urllib2 aux requêtes, il est crucial de comprendre les différences dans les attributs utilisés pour récupérer les données de l'image.

Initialement, le code utilisant urllib2 lit l'image en utilisant img.read(), tandis que le code souhaité l'approche avec les requêtes a img = r.raw.read(). Ceci est erroné car r.raw est un objet fichier, et non les données d'image réelles.

Pour résoudre ce problème, il existe deux solutions viables :

  • Utiliser l'objet du fichier Response.raw :

    Définissez decode_content sur True pour forcer la décompression des réponses compressées. Cela vous permet de diffuser les données vers un objet fichier à l'aide de shutdown.copyfileobj().

    import requests
    import shutil
    
    r = requests.get(url, stream=True)
    if r.status_code == 200:
        with open(path, 'wb') as f:
            r.raw.decode_content = True
            shutil.copyfileobj(r.raw, f)        
  • Itération sur la réponse :

    Cette méthode garantit la décompression des données.

    r = requests.get(url, stream=True)
    if r.status_code == 200:
        with open(path, 'wb') as f:
            for chunk in r:
                f.write(chunk)

    Vous pouvez également spécifier une taille de bloc personnalisée en utilisant Response.iter_content().

    r = requests.get(url, 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 (« wb ») pour empêcher la traduction des nouvelles lignes. De plus, définissez stream=True pour empêcher le téléchargement de l'image entière 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