tutorial scraping medium machine learning examples example español python python-imaging-library

scraping - ¿Cómo leo los datos de imagen de una URL en Python?



web scraping python examples (6)

En Python3, los módulos StringIO y cStringIO han desaparecido.

En Python3 debes usar:

from PIL import Image import requests from io import BytesIO response = requests.get(url) img = Image.open(BytesIO(response.content))

Lo que trato de hacer es bastante simple cuando se trata de un archivo local, pero el problema surge cuando trato de hacerlo con una URL remota.

Básicamente, estoy tratando de crear un objeto de imagen PIL a partir de un archivo extraído de una URL. Claro, siempre podría buscar el URL y almacenarlo en un archivo temporal, luego abrirlo en un objeto de imagen, pero eso se siente muy ineficiente.

Esto es lo que tengo:

Image.open(urlopen(url))

Se deshace quejándose de que seek() no está disponible, entonces intenté esto:

Image.open(urlopen(url).read())

Pero eso tampoco funcionó. ¿Existe una mejor manera de hacerlo, o está escribiendo en un archivo temporal la forma aceptada de hacer este tipo de cosas?



Para aquellos que están haciendo algo de sklearn / numpy post procesamiento (es decir, aprendizaje profundo), puede envolver el objeto PIL con np.array (). Esto podría evitar que tenga que buscarlo en Google como lo hice yo:

from PIL import Image import requests import numpy as np from StringIO import StringIO response = requests.get(url) img = np.array(Image.open(StringIO(response.content)))


Use StringIO para convertir la cadena de lectura en un objeto similar a un archivo:

from StringIO import StringIO import urllib Image.open(StringIO(urllib.urlopen(url).read()))


Yo uso la biblioteca de solicitudes. Parece ser más robusto.

from PIL import Image import requests from StringIO import StringIO response = requests.get(url) img = Image.open(StringIO(response.content))


podrías intentar usar un StringIO

import urllib, cStringIO file = cStringIO.StringIO(urllib.urlopen(URL).read()) img = Image.open(file)