Un raspador de imágenes de Python no es solo una herramienta para mejorar sus habilidades de programación. También puede usarlo para generar imágenes para un proyecto de aprendizaje automático o generar miniaturas del sitio. Si bien puede haber otras formas de hacer cosas similares, nada puede vencer el control que tiene al usar las herramientas que usted mismo construye.

Aprenda a extraer imágenes de cualquier sitio web utilizando Python y la biblioteca BeautifulSoup.

¿Es legal el raspado de imágenes?

Me gusta raspado web más generalizado, el raspado de imágenes es un método para descargar contenido de sitios web. No es ilegal, pero hay algunas reglas y mejores prácticas que debe seguir. En primer lugar, debe evitar raspar un sitio web si establece explícitamente que no quiere que lo haga. Puedes averiguarlo buscando un /robots.txt archivo en el sitio de destino.

La mayoría de los sitios web permiten el rastreo web porque quieren que los motores de búsqueda indexen su contenido. Puede raspar dichos sitios web ya que sus imágenes están disponibles públicamente.

instagram viewer

Sin embargo, el hecho de que puedas descargar una imagen no significa que puedas usarla como si fuera tuya. La mayoría de los sitios web autorizan sus imágenes para evitar que las vuelvas a publicar o las reutilices de otras formas. Suponga siempre que no puede reutilizar imágenes a menos que exista una exención específica.

Configuración del paquete de Python

Deberá instalar algunos paquetes antes de comenzar. Si no tiene Python instalado en su computadora, visite el sitio oficial python.org sitio web para descargar e instalar la última versión.

A continuación, abra su terminal en la carpeta de su proyecto y activar un entorno virtual Python para aislar sus dependencias.

Finalmente, instale el peticiones y HermosaSopa paquetes usando pip:

pip instalar solicitudes bs4

Raspado de imágenes con Python

Para este tutorial de raspado de imágenes, utilizará el peticiones biblioteca para obtener una página web que contiene las imágenes de destino. A continuación, pasará la respuesta de ese sitio web a HermosaSopa para obtener todas las direcciones de enlaces de imágenes de imagen etiquetas Luego, escribirá cada archivo de imagen en una carpeta para descargar las imágenes.

Cómo obtener URL de imágenes con BeautifulSoup de Python

Ahora continúe y cree un archivo de Python en la carpeta raíz de su proyecto. Asegúrese de adjuntar el .py extensión al nombre del archivo.

Cada fragmento de código de este tutorial es una continuación del anterior.

Abra el archivo Python con cualquier buen editor de código y use el siguiente código para solicitar una página web:

importar peticiones
URL = "URL del sitio de imágenes" # Reemplace esto con la URL del sitio web
getURL = solicitudes.get (URL, headers={"User-Agent":"Mozilla/5.0"})
imprimir (getURL.status_code)

Si el programa anterior genera un código de respuesta 200, la solicitud fue exitosa. De lo contrario, es posible que desee asegurarse de que su conexión de red sea estable. Además, asegúrese de haber proporcionado una URL válida.

Ahora usa HermosaSopa leer el contenido de la página web con la ayuda del html_parser:

de bs4 importar HermosaSopa

sopa = BeautifulSoup (getURL.text, 'html.parser')

imágenes = sopa.find_all('img')
imprimir (imágenes)

Este código crea una lista de objetos, cada uno de los cuales representa una imagen de la página web. Sin embargo, lo que necesita de estos datos es el texto de cada imagen. origen atributo.

Para extraer la fuente de cada imagen etiqueta:

fuentes de imagen = []

por imagen en imágenes:
fuentes de imagen.append (imagen.get('src'))

imprimir (fuentes de imagen)

Vuelva a ejecutar su código, y las direcciones de imagen ahora deberían aparecer en una nueva lista (fuentes de imagen). Ha extraído con éxito cada fuente de imagen de la página web de destino.

Cómo guardar las imágenes con Python

Primero, cree una carpeta de destino de descarga en el directorio raíz de su proyecto y asígnele un nombre imágenes.

Para que Python descargue correctamente las imágenes, sus rutas deben ser direcciones URL absolutas completas. En otras palabras, deben incluir el " http://" o " https://" prefijo, más el dominio completo del sitio web. Si la página web hace referencia a sus imágenes mediante URL relativas, deberá convertirlas en URL absolutas.

En el caso fácil, cuando la URL es absoluta, iniciar la descarga es solo un caso de solicitar cada imagen de las fuentes extraídas anteriormente:

por imagen en Fuentes de imagen:
webs = solicitudes.obtener (imagen)
open('imágenes/' + imagen.split('/')[-1], 'wb').escribir (webs.contenido)

los imagen.split('/')[-1] La palabra clave divide el enlace de la imagen en cada barra diagonal (/). Luego recupera el nombre del archivo de imagen (incluida cualquier extensión) del último elemento.

Tenga en cuenta que, en casos excepcionales, los nombres de los archivos de imagen pueden coincidir, lo que provocaría sobrescrituras de la descarga. Siéntase libre de explorar soluciones a este problema como una extensión de este ejemplo.

Las URL absolutas pueden volverse bastante complicadas, con muchos casos extremos que cubrir. Afortunadamente, hay un método útil en el solicitudes.compat paquete llamado unirse a la url. Este método devuelve una URL completa, dada una URL base y una URL que puede ser relativa. Te permite resolver valores que encontrarás en href y origen atributos

El código final se ve así:

de bs4 importar HermosaSopa
URL = "URL del sitio de imágenes" # Reemplace esto con la URL del sitio web
getURL = solicitudes.get (URL, headers={"User-Agent":"Mozilla/5.0"})
sopa = BeautifulSoup (getURL.text, 'html.parser')

imágenes = sopa.find_all('img')
URL resueltas = []

por imagen en imágenes:
origen = imagen.get('origen')
URL resueltas.append (solicitudes.compat.urljoin (URL, src))

por imagen en URL resueltas:
webs = solicitudes.obtener (imagen)
open('imágenes/' + imagen.split('/')[-1], 'wb').escribir (webs.contenido)

Nunca se quede sin datos de imagen

Muchos proyectos de reconocimiento de imágenes chocan contra un muro debido a una cantidad inadecuada de imágenes para entrenar un modelo. Pero siempre puede extraer imágenes de sitios web para aumentar su depósito de datos. Y, afortunadamente, Python es un poderoso raspador de imágenes que puede usar continuamente sin temor a que se le agote el precio.

Si está interesado en obtener otros tipos de datos de la web, es posible que desee averiguar cómo usar Python para el raspado web general.