recuperar temporalmente una imagen usando la biblioteca de solicitudes

Estoy escribiendo un raspador web del que necesito para raspar solo la miniatura de una imagen de la URL.

Esta es mi función usando, la biblioteca urlib.

def create_thumb(self): if self.url and not self.thumbnail: image = urllib.request.urlretrieve(self.url) # Create the thumbnail of dimension size size = 350, 350 t_img = Imagelib.open(image[0]) t_img.thumbnail(size) # Get the directory name where the temp image was stored # by urlretrieve dir_name = os.path.dirname(image[0]) # Get the image name from the url img_name = os.path.basename(self.url) # Save the thumbnail in the same temp directory # where urlretrieve got the full-sized image, # using the same file extention in os.path.basename() file_path = os.path.join(dir_name, "thumb" + img_name) t_img.save(file_path) # Save the thumbnail in the media directory, prepend thumb self.thumbnail.save( os.path.basename(self.url), File(open(file_path, 'rb'))) 

por varias razones, necesito cambiar esto para usar la biblioteca de solicitudes, ¿cuál sería el equivalente para guardar una imagen a la temperatura?

Puede omitir guardar en una parte del archivo temporal y usar el objeto de respuesta correspondiente directamente para crear la imagen:

 #!/usr/bin/env python3 import urllib.request from PIL import Image # $ pip install pillow im = Image.open(urllib.request.urlopen(url)) print(im.format, im.mode, im.size) 

Aquí hay requests analógicas:

 #!/usr/bin/env python import requests # $ pip install requests from PIL import Image # $ pip install pillow r = requests.get(url, stream=True) r.raw.decode_content = True # handle spurious Content-Encoding im = Image.open(r.raw) print(im.format, im.mode, im.size) 

Lo he probado con Pillow 2.9.0 y requests 2.7.0. Debería funcionar desde la Pillow 2.8 .

Puedes escribir a un io.BytesIO:

 import requests from PIL import Image from io import BytesIO r = requests.get(self.url) b = BytesIO(r.content) size = 350, 350 img = Image.open(b) img.thumbnail(size) img.save("foo.thumbnail", "JPEG")