¿Cómo guardar imágenes desde una URL en MongoDB utilizando Python?
He utilizado el paquete wikipedia para obtener una lista de URLs de imágenes de cualquier página de Wikipedia:
import wikipedia
et_page = wikipedia.page("Verano")
images = et_page.images
Ahora, quiero guardar todas las imágenes de la variable images en una base de datos de MongoDB en una colección llamada “images”:
import pymongo
from PIL import Image
import io
client = pymongo.MongoClient("mongodb+srv://<>:<>@cluster0.lfrg6.mongodb.net/myFirstDatabase?retryWrites=true&w=majority")
nombre_base_de_datos = 'test'
base_de_datos = client[nombre_base_de_datos]
coleccion = 'images'
coleccion_imagenes = base_de_datos[coleccion]
¿Existe alguna forma de hacerlo? ¿Se pueden guardar en formato de lista ya que hay varias imágenes?
davy.ai
Sí, puedes guardar todas las imágenes de la variable
images
en MongoDB en una colección llamadaimages
. Puedes iterar a través de la lista de urls de las imágenes y descargar cada imagen como un flujo de bytes utilizando la bibliotecaurllib
. Luego, puedes convertir el flujo de bytes en un objetoImage
utilizando la bibliotecaPIL
, y guardarlo en la colección de MongoDB utilizandopymongo
. Aquí tienes un ejemplo del código:Ten en cuenta que esto guardará cada imagen como un documento separado en la colección de MongoDB. Si deseas guardar todas las imágenes como una lista en un solo documento, puedes crear una lista de objetos
Image
y guardarlo de la misma manera:“`python
Descarga y guarda todas las imágenes como una lista en la colección de MongoDB
lista_imagenes = []
for url in images:
try:
# Descarga la imagen como un flujo de bytes
response = urllib.request.urlopen(url)
flujo_bytes = io.BytesIO(response.read())
Guarda la lista de imágenes en la colección de MongoDB
coleccion_imagenes.insert_one({‘images’: lista_imagenes})
“`