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!