Procesamiento de imágenes y videos

El raspado web generalmente implica descargar, almacenar y procesar el contenido de los medios web. En este capítulo, entendamos cómo procesar el contenido descargado de la web.

Introducción

El contenido de medios web que obtenemos durante el scraping pueden ser imágenes, archivos de audio y video, en forma de páginas que no son web, así como archivos de datos. Pero, ¿podemos confiar en los datos descargados especialmente en la extensión de datos que vamos a descargar y almacenar en la memoria de nuestra computadora? Esto hace que sea fundamental conocer el tipo de datos que vamos a almacenar localmente.

Obtener contenido multimedia de la página web

En esta sección, vamos a aprender cómo podemos descargar contenido multimedia que represente correctamente el tipo de medio en función de la información del servidor web. Podemos hacerlo con la ayuda de Pythonrequests módulo como hicimos en el capítulo anterior.

Primero, necesitamos importar los módulos de Python necesarios de la siguiente manera:

import requests

Ahora, proporcione la URL del contenido multimedia que queremos descargar y almacenar localmente.

url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"

Utilice el siguiente código para crear un objeto de respuesta HTTP.

r = requests.get(url)

Con la ayuda de la siguiente línea de código, podemos guardar el contenido recibido como archivo .png.

with open("ThinkBig.png",'wb') as f:
   f.write(r.content)

Después de ejecutar el script de Python anterior, obtendremos un archivo llamado ThinkBig.png, que tendría la imagen descargada.

Extrayendo el nombre de archivo de la URL

Después de descargar el contenido del sitio web, también queremos guardarlo en un archivo con un nombre de archivo que se encuentra en la URL. Pero también podemos verificar si también existen números de fragmentos adicionales en la URL. Para esto, necesitamos encontrar el nombre de archivo real en la URL.

Con la ayuda de la siguiente secuencia de comandos de Python, use urlparse, podemos extraer el nombre del archivo de la URL -

import urllib3
import os
url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"
a = urlparse(url)
a.path

Puede observar la salida como se muestra a continuación:

'/wp-content/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg'
os.path.basename(a.path)

Puede observar la salida como se muestra a continuación:

'MetaSlider_ThinkBig-1080x180.jpg'

Una vez que ejecute el script anterior, obtendremos el nombre de archivo de la URL.

Información sobre el tipo de contenido de la URL

Mientras extraemos los contenidos del servidor web, mediante solicitud GET, también podemos consultar su información proporcionada por el servidor web. Con la ayuda de la siguiente secuencia de comandos de Python, podemos determinar qué significa servidor web con el tipo de contenido:

Primero, necesitamos importar los módulos de Python necesarios de la siguiente manera:

import requests

Ahora, debemos proporcionar la URL del contenido multimedia que queremos descargar y almacenar localmente.

url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"

La siguiente línea de código creará un objeto de respuesta HTTP.

r = requests.get(url, allow_redirects=True)

Ahora, podemos obtener qué tipo de información sobre el contenido puede proporcionar el servidor web.

for headers in r.headers: print(headers)

Puede observar la salida como se muestra a continuación:

Date
Server
Upgrade
Connection
Last-Modified
Accept-Ranges
Content-Length
Keep-Alive
Content-Type

Con la ayuda de la siguiente línea de código podemos obtener la información particular sobre el tipo de contenido, digamos tipo de contenido -

print (r.headers.get('content-type'))

Puede observar la salida como se muestra a continuación:

image/jpeg

Con la ayuda de la siguiente línea de código, podemos obtener la información particular sobre el tipo de contenido, digamos EType -

print (r.headers.get('ETag'))

Puede observar la salida como se muestra a continuación:

None

Observe el siguiente comando:

print (r.headers.get('content-length'))

Puede observar la salida como se muestra a continuación:

12636

Con la ayuda de la siguiente línea de código podemos obtener la información particular sobre el tipo de contenido, digamos Servidor -

print (r.headers.get('Server'))

Puede observar la salida como se muestra a continuación:

Apache

Generación de miniaturas para imágenes

Miniatura es una descripción o representación muy pequeña. Un usuario puede querer guardar solo la miniatura de una imagen grande o guardar tanto la imagen como la miniatura. En esta sección vamos a crear una miniatura de la imagen llamadaThinkBig.png descargado en la sección anterior “Obtención de contenido multimedia desde una página web”.

Para este script de Python, necesitamos instalar la biblioteca de Python llamada Pillow, una bifurcación de la biblioteca de imágenes de Python que tiene funciones útiles para manipular imágenes. Se puede instalar con la ayuda del siguiente comando:

pip install pillow

La siguiente secuencia de comandos de Python creará una miniatura de la imagen y la guardará en el directorio actual con el prefijo del archivo de miniatura con Th_

import glob
from PIL import Image
for infile in glob.glob("ThinkBig.png"):
   img = Image.open(infile)
   img.thumbnail((128, 128), Image.ANTIALIAS)
   if infile[0:2] != "Th_":
      img.save("Th_" + infile, "png")

El código anterior es muy fácil de entender y puede buscar el archivo en miniatura en el directorio actual.

Captura de pantalla del sitio web

En web scraping, una tarea muy común es tomar una captura de pantalla de un sitio web. Para implementar esto, usaremos selenium y webdriver. La siguiente secuencia de comandos de Python tomará la captura de pantalla del sitio web y la guardará en el directorio actual.

From selenium import webdriver
path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
browser = webdriver.Chrome(executable_path = path)
browser.get('https://tutorialspoint.com/')
screenshot = browser.save_screenshot('screenshot.png')
browser.quit

Puede observar la salida como se muestra a continuación:

DevTools listening on ws://127.0.0.1:1456/devtools/browser/488ed704-9f1b-44f0-
a571-892dc4c90eb7
<bound method WebDriver.quit of <selenium.webdriver.chrome.webdriver.WebDriver
(session="37e8e440e2f7807ef41ca7aa20ce7c97")>>

Después de ejecutar el script, puede verificar su directorio actual para screenshot.png archivo.

Generación de miniaturas para video

Supongamos que hemos descargado videos del sitio web y queremos generar miniaturas para ellos, de modo que se pueda hacer clic en un video específico, basado en su miniatura. Para generar miniaturas para videos, necesitamos una herramienta simple llamadaffmpeg que se puede descargar desde www.ffmpeg.org. Después de la descarga, debemos instalarlo según las especificaciones de nuestro sistema operativo.

El siguiente script de Python generará una miniatura del video y lo guardará en nuestro directorio local:

import subprocess
video_MP4_file = “C:\Users\gaurav\desktop\solar.mp4
thumbnail_image_file = 'thumbnail_solar_video.jpg'
subprocess.call(['ffmpeg', '-i', video_MP4_file, '-ss', '00:00:20.000', '-
   vframes', '1', thumbnail_image_file, "-y"])

Después de ejecutar el script anterior, obtendremos la miniatura llamada thumbnail_solar_video.jpg guardado en nuestro directorio local.

Extraer un video MP4 a MP3

Suponga que ha descargado algún archivo de video de un sitio web, pero solo necesita el audio de ese archivo para cumplir con su propósito, entonces se puede hacer en Python con la ayuda de la biblioteca de Python llamada moviepy que se puede instalar con la ayuda del siguiente comando:

pip install moviepy

Ahora, después de instalar con éxito moviepy con la ayuda del siguiente script, podemos convertir MP4 a MP3.

import moviepy.editor as mp
clip = mp.VideoFileClip(r"C:\Users\gaurav\Desktop\1234.mp4")
clip.audio.write_audiofile("movie_audio.mp3")

Puede observar la salida como se muestra a continuación:

[MoviePy] Writing audio in movie_audio.mp3
100%|¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 674/674 [00:01<00:00,
476.30it/s]
[MoviePy] Done.

El script anterior guardará el archivo MP3 de audio en el directorio local.