Processamento de imagens e vídeos

A coleta da web geralmente envolve o download, o armazenamento e o processamento do conteúdo de mídia da web. Neste capítulo, vamos entender como processar o conteúdo baixado da web.

Introdução

O conteúdo de mídia da web que obtemos durante a extração pode ser imagens, arquivos de áudio e vídeo, na forma de páginas que não são da web, bem como arquivos de dados. Mas, podemos confiar nos dados baixados, especialmente na extensão dos dados que vamos baixar e armazenar na memória do computador? Isso torna essencial saber sobre o tipo de dados que vamos armazenar localmente.

Obtendo conteúdo de mídia da página da web

Nesta seção, vamos aprender como podemos baixar conteúdo de mídia que representa corretamente o tipo de mídia com base nas informações do servidor web. Podemos fazer isso com a ajuda de Pythonrequests módulo como fizemos no capítulo anterior.

Primeiro, precisamos importar os módulos Python necessários da seguinte maneira -

import requests

Agora, forneça a URL do conteúdo de mídia que queremos baixar e armazenar localmente.

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

Use o código a seguir para criar o objeto de resposta HTTP.

r = requests.get(url)

Com a ajuda da seguinte linha de código, podemos salvar o conteúdo recebido como um arquivo .png.

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

Depois de executar o script Python acima, obteremos um arquivo chamado ThinkBig.png, que conterá a imagem baixada.

Extraindo o nome do arquivo do URL

Depois de baixar o conteúdo do site, também queremos salvá-lo em um arquivo com um nome de arquivo encontrado na URL. Mas também podemos verificar se vários fragmentos adicionais também existem na URL. Para isso, precisamos encontrar o nome do arquivo real na URL.

Com a ajuda do seguinte script Python, usando urlparse, podemos extrair o nome do arquivo do URL -

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

Você pode observar a saída conforme mostrado abaixo -

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

Você pode observar a saída conforme mostrado abaixo -

'MetaSlider_ThinkBig-1080x180.jpg'

Depois de executar o script acima, obteremos o nome do arquivo do URL.

Informações sobre o tipo de conteúdo do URL

Ao extrair o conteúdo do servidor web, por solicitação GET, também podemos verificar suas informações fornecidas pelo servidor web. Com a ajuda do seguinte script Python, podemos determinar o que significa servidor web com o tipo de conteúdo -

Primeiro, precisamos importar os módulos Python necessários da seguinte maneira -

import requests

Agora, precisamos fornecer a URL do conteúdo de mídia que desejamos baixar e armazenar localmente.

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

A linha de código a seguir criará o objeto de resposta HTTP.

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

Agora, podemos obter que tipo de informação sobre o conteúdo pode ser fornecida pelo servidor web.

for headers in r.headers: print(headers)

Você pode observar a saída conforme mostrado abaixo -

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

Com a ajuda da seguinte linha de código, podemos obter as informações específicas sobre o tipo de conteúdo, digamos content-type -

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

Você pode observar a saída conforme mostrado abaixo -

image/jpeg

Com a ajuda da linha de código a seguir, podemos obter as informações específicas sobre o tipo de conteúdo, digamos EType -

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

Você pode observar a saída conforme mostrado abaixo -

None

Observe o seguinte comando -

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

Você pode observar a saída conforme mostrado abaixo -

12636

Com a ajuda da seguinte linha de código, podemos obter as informações específicas sobre o tipo de conteúdo, digamos Servidor -

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

Você pode observar a saída conforme mostrado abaixo -

Apache

Gerando miniatura para imagens

A miniatura é uma descrição ou representação muito pequena. Um usuário pode querer salvar apenas a miniatura de uma imagem grande ou salvar a imagem e também a miniatura. Nesta seção, vamos criar uma miniatura da imagem chamadaThinkBig.png baixado na seção anterior “Obtendo conteúdo de mídia de uma página da web”.

Para este script Python, precisamos instalar a biblioteca Python chamada Pillow, um fork da biblioteca de imagens Python com funções úteis para manipular imagens. Ele pode ser instalado com a ajuda do seguinte comando -

pip install pillow

O seguinte script Python criará uma miniatura da imagem e a salvará no diretório atual prefixando o arquivo de miniatura com 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")

O código acima é muito fácil de entender e você pode verificar o arquivo de miniaturas no diretório atual.

Captura de tela do site

No web scraping, uma tarefa muito comum é fazer uma captura de tela de um site. Para implementar isso, vamos usar selênio e webdriver. O seguinte script Python fará a captura de tela do site e salvará no diretório atual.

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

Você pode observar a saída conforme mostrado abaixo -

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

Depois de executar o script, você pode verificar seu diretório atual para screenshot.png Arquivo.

Geração de miniaturas para vídeo

Suponha que baixamos vídeos de um site e desejamos gerar miniaturas para eles, de modo que um vídeo específico, com base em sua miniatura, possa ser clicado. Para gerar miniaturas de vídeos, precisamos de uma ferramenta simples chamadaffmpeg que pode ser baixado de www.ffmpeg.org. Após o download, precisamos instalá-lo de acordo com as especificações do nosso sistema operacional.

O seguinte script Python irá gerar a miniatura do vídeo e salvá-lo em nosso diretório 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"])

Depois de executar o script acima, obteremos a miniatura chamada thumbnail_solar_video.jpg salvo em nosso diretório local.

Extraindo um vídeo MP4 para um MP3

Suponha que você tenha baixado algum arquivo de vídeo de um site, mas você só precisa de áudio desse arquivo para servir ao seu propósito, então isso pode ser feito em Python com a ajuda da biblioteca Python chamada moviepy que pode ser instalado com a ajuda do seguinte comando -

pip install moviepy

Agora, depois de instalar o moviepy com a ajuda do seguinte script, podemos converter e MP4 para MP3.

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

Você pode observar a saída conforme mostrado abaixo -

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

O script acima salvará o arquivo MP3 de áudio no diretório local.