es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes guardar todas las imágenes de la variable images en MongoDB en una colección llamada images. 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 biblioteca urllib. Luego, puedes convertir el flujo de bytes en un objeto Image utilizando la biblioteca PIL, y guardarlo en la colección de MongoDB utilizando pymongo. Aquí tienes un ejemplo del código:

    import wikipedia
    import urllib.request
    import pymongo
    from PIL import Image
    
    # Obtén la lista de urls de las imágenes
    et_page = wikipedia.page("Summer")
    images = et_page.images
    
    # Conéctate a la base de datos y colección de MongoDB
    client = pymongo.MongoClient("mongodb+srv://<username>:<password>@cluster0.lfrg6.mongodb.net/myFirstDatabase?retryWrites=true&w=majority")
    nombre_base_datos = 'test'
    base_datos = client[nombre_base_datos]
    nombre_coleccion = 'images'
    coleccion_imagenes = base_datos[nombre_coleccion]
    
    # Descarga y guarda cada imagen en la colección de MongoDB
    for url in images:
        try:
            # Descarga la imagen como un flujo de bytes
            response = urllib.request.urlopen(url)
            flujo_bytes = io.BytesIO(response.read())
    
            # Convierte el flujo de bytes en un objeto Image
            imagen = Image.open(flujo_bytes)
    
            # Guarda la imagen en la colección de MongoDB
            coleccion_imagenes.insert_one({'image': imagen})
    
        except:
            pass
    

    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())

        # Convierte el flujo de bytes en un objeto Image
        imagen = Image.open(flujo_bytes)
    
        # Agrega la imagen a la lista
        lista_imagenes.append(imagen)
    
    except:
        pass
    

    Guarda la lista de imágenes en la colección de MongoDB

    coleccion_imagenes.insert_one({‘images’: lista_imagenes})
    “`

Comments are closed.