Elaborazione di immagini e video

Il web scraping di solito comporta il download, l'archiviazione e l'elaborazione del contenuto multimediale del web. In questo capitolo, vediamo come elaborare il contenuto scaricato dal web.

introduzione

I contenuti multimediali web che otteniamo durante lo scraping possono essere file di immagini, audio e video, sotto forma di pagine non web e file di dati. Ma possiamo fidarci dei dati scaricati, specialmente sull'estensione dei dati che scaricheremo e memorizzeremo nella memoria del nostro computer? Ciò rende essenziale conoscere il tipo di dati che memorizzeremo localmente.

Recupero di contenuti multimediali dalla pagina Web

In questa sezione, impareremo come scaricare contenuti multimediali che rappresentano correttamente il tipo di media in base alle informazioni dal server web. Possiamo farlo con l'aiuto di Pythonrequests modulo come abbiamo fatto nel capitolo precedente.

Innanzitutto, dobbiamo importare i moduli Python necessari come segue:

import requests

Fornisci ora l'URL del contenuto multimediale che vogliamo scaricare e archiviare localmente.

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

Utilizzare il codice seguente per creare l'oggetto risposta HTTP.

r = requests.get(url)

Con l'aiuto della seguente riga di codice, possiamo salvare il contenuto ricevuto come file .png.

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

Dopo aver eseguito lo script Python sopra, otterremo un file chiamato ThinkBig.png, che avrebbe l'immagine scaricata.

Estrazione del nome del file dall'URL

Dopo aver scaricato il contenuto dal sito web, vogliamo anche salvarlo in un file con un nome di file trovato nell'URL. Ma possiamo anche controllare se esistono anche numeri di frammenti aggiuntivi nell'URL. Per questo, dobbiamo trovare il nome del file effettivo dall'URL.

Con l'aiuto di seguire lo script Python, usando urlparse, possiamo estrarre il nome del file dall'URL -

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

È possibile osservare l'output come mostrato di seguito:

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

È possibile osservare l'output come mostrato di seguito:

'MetaSlider_ThinkBig-1080x180.jpg'

Una volta eseguito lo script precedente, otterremo il nome del file dall'URL.

Informazioni sul tipo di contenuto dall'URL

Durante l'estrazione dei contenuti dal web server, su richiesta GET, possiamo anche verificare le sue informazioni fornite dal web server. Con l'aiuto del seguente script Python possiamo determinare cosa significa server web con il tipo di contenuto -

Innanzitutto, dobbiamo importare i moduli Python necessari come segue:

import requests

Ora, dobbiamo fornire l'URL del contenuto multimediale che vogliamo scaricare e archiviare localmente.

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

La seguente riga di codice creerà l'oggetto risposta HTTP.

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

Ora possiamo ottenere il tipo di informazioni sui contenuti che possono essere fornite dal server web.

for headers in r.headers: print(headers)

È possibile osservare l'output come mostrato di seguito:

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

Con l'aiuto della seguente riga di codice possiamo ottenere le informazioni particolari sul tipo di contenuto, diciamo tipo di contenuto -

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

È possibile osservare l'output come mostrato di seguito:

image/jpeg

Con l'aiuto della seguente riga di codice, possiamo ottenere le informazioni particolari sul tipo di contenuto, ad esempio EType -

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

È possibile osservare l'output come mostrato di seguito:

None

Osserva il seguente comando:

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

È possibile osservare l'output come mostrato di seguito:

12636

Con l'aiuto della seguente riga di codice possiamo ottenere le informazioni particolari sul tipo di contenuto, ad esempio Server -

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

È possibile osservare l'output come mostrato di seguito:

Apache

Generazione di miniature per le immagini

La miniatura è una descrizione o rappresentazione molto piccola. Un utente potrebbe voler salvare solo la miniatura di un'immagine grande o salvare sia l'immagine che la miniatura. In questa sezione creeremo una miniatura dell'immagine denominataThinkBig.png scaricato nella sezione precedente "Acquisizione di contenuto multimediale dalla pagina web".

Per questo script Python, abbiamo bisogno di installare la libreria Python denominata Pillow, un fork della libreria Python Image con funzioni utili per manipolare le immagini. Può essere installato con l'aiuto del seguente comando:

pip install pillow

Il seguente script Python creerà una miniatura dell'immagine e la salverà nella directory corrente anteponendo al file di anteprima 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")

Il codice sopra è molto facile da capire e puoi controllare il file di anteprima nella directory corrente.

Screenshot dal sito web

Nel web scraping, un'attività molto comune è acquisire uno screenshot di un sito web. Per implementarlo, utilizzeremo selenio e webdriver. Il seguente script Python acquisirà lo screenshot dal sito Web e lo salverà nella directory corrente.

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

È possibile osservare l'output come mostrato di seguito:

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

Dopo aver eseguito lo script, puoi controllare la directory corrente per screenshot.png file.

Generazione di miniature per video

Supponiamo di aver scaricato video dal sito Web e di voler generare le miniature per loro in modo che sia possibile fare clic su un video specifico, in base alla sua miniatura. Per generare miniature per i video abbiamo bisogno di un semplice strumento chiamatoffmpeg che può essere scaricato da www.ffmpeg.org. Dopo il download, dobbiamo installarlo secondo le specifiche del nostro sistema operativo.

Il seguente script Python genererà una miniatura del video e la salverà nella nostra directory locale -

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

Dopo aver eseguito lo script precedente, otterremo la miniatura denominata thumbnail_solar_video.jpg salvato nella nostra directory locale.

Copia di un video MP4 in un MP3

Supponi di aver scaricato un file video da un sito Web, ma hai solo bisogno dell'audio da quel file per servire al tuo scopo, quindi può essere fatto in Python con l'aiuto della libreria Python chiamata moviepy che può essere installato con l'aiuto del seguente comando:

pip install moviepy

Ora, dopo aver installato con successo moviepy con l'aiuto del seguente script, possiamo convertire e MP4 in MP3.

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

È possibile osservare l'output come mostrato di seguito:

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

Lo script sopra salverà il file audio MP3 nella directory locale.