Przetwarzanie zdjęć i filmów

Web scraping zwykle obejmuje pobieranie, przechowywanie i przetwarzanie treści mediów internetowych. W tym rozdziale wyjaśnimy, jak przetwarzać zawartość pobraną z sieci.

Wprowadzenie

Treści internetowe, które uzyskujemy podczas scrapingu, mogą być obrazami, plikami audio i wideo, w postaci stron innych niż strony internetowe, a także plikami danych. Ale czy możemy ufać pobranym danym, zwłaszcza jeśli chodzi o rozszerzenie danych, które będziemy pobierać i przechowywać w pamięci naszego komputera? Dlatego ważne jest, aby wiedzieć, jakie dane będziemy przechowywać lokalnie.

Pobieranie treści multimedialnych ze strony internetowej

W tej sekcji dowiemy się, w jaki sposób możemy pobierać treści multimedialne, które poprawnie reprezentują typ mediów na podstawie informacji z serwera internetowego. Możemy to zrobić przy pomocy Pythonarequests moduł, tak jak to zrobiliśmy w poprzednim rozdziale.

Najpierw musimy zaimportować niezbędne moduły Pythona w następujący sposób -

import requests

Teraz podaj adres URL treści multimedialnych, które chcemy pobrać i przechowywać lokalnie.

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

Użyj poniższego kodu, aby utworzyć obiekt odpowiedzi HTTP.

r = requests.get(url)

Za pomocą poniższego wiersza kodu możemy zapisać otrzymaną treść jako plik .png.

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

Po uruchomieniu powyższego skryptu w Pythonie otrzymamy plik o nazwie ThinkBig.png, który będzie zawierał pobrany obraz.

Wyodrębnianie nazwy pliku z adresu URL

Po pobraniu treści ze strony internetowej chcemy również zapisać ją w pliku o nazwie pliku znajdującej się w adresie URL. Ale możemy też sprawdzić, czy w adresie URL istnieje również liczba dodatkowych fragmentów. W tym celu musimy znaleźć rzeczywistą nazwę pliku z adresu URL.

Z pomocą następującego skryptu Pythona, używając urlparse, możemy wyodrębnić nazwę pliku z adresu URL -

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

Możesz obserwować wyjście, jak pokazano poniżej -

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

Możesz obserwować wyjście, jak pokazano poniżej -

'MetaSlider_ThinkBig-1080x180.jpg'

Po uruchomieniu powyższego skryptu otrzymamy nazwę pliku z adresu URL.

Informacje o rodzaju treści z adresu URL

Podczas wypakowywania treści z serwera WWW, poprzez żądanie GET, możemy również sprawdzić jego informacje podane przez serwer WWW. Za pomocą poniższego skryptu w Pythonie możemy określić, co serwer WWW oznacza z rodzajem treści -

Najpierw musimy zaimportować niezbędne moduły Pythona w następujący sposób -

import requests

Teraz musimy podać adres URL treści multimedialnych, które chcemy pobrać i przechowywać lokalnie.

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

Poniższy wiersz kodu utworzy obiekt odpowiedzi HTTP.

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

Teraz możemy dowiedzieć się, jakiego typu informacje o treściach może dostarczyć serwer WWW.

for headers in r.headers: print(headers)

Możesz obserwować wyjście, jak pokazano poniżej -

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

Za pomocą następującego wiersza kodu możemy uzyskać szczegółowe informacje o typie treści, powiedzmy typ zawartości -

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

Możesz obserwować wyjście, jak pokazano poniżej -

image/jpeg

Za pomocą następującego wiersza kodu możemy uzyskać szczegółowe informacje o typie treści, powiedzmy EType -

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

Możesz obserwować wyjście, jak pokazano poniżej -

None

Obserwuj następujące polecenie -

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

Możesz obserwować wyjście, jak pokazano poniżej -

12636

Za pomocą następującego wiersza kodu możemy uzyskać szczegółowe informacje o typie zawartości, powiedzmy Server -

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

Możesz obserwować wyjście, jak pokazano poniżej -

Apache

Generowanie miniatur dla obrazów

Miniatura to bardzo mały opis lub reprezentacja. Użytkownik może chcieć zapisać tylko miniaturę dużego obrazu lub zapisać zarówno obraz, jak i miniaturę. W tej sekcji utworzymy miniaturę obrazu o nazwieThinkBig.png pobrane w poprzedniej sekcji „Pobieranie treści multimedialnych ze strony internetowej”.

W przypadku tego skryptu Pythona musimy zainstalować bibliotekę Python o nazwie Pillow, rozwidlenie biblioteki obrazów Pythona, która ma przydatne funkcje do manipulowania obrazami. Można go zainstalować za pomocą następującego polecenia -

pip install pillow

Poniższy skrypt w języku Python utworzy miniaturę obrazu i zapisze ją w bieżącym katalogu, poprzedzając plik miniatury znakiem 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")

Powyższy kod jest bardzo łatwy do zrozumienia i możesz sprawdzić plik miniatury w bieżącym katalogu.

Zrzut ekranu ze strony internetowej

Podczas skrobania stron internetowych bardzo częstym zadaniem jest wykonanie zrzutu ekranu witryny internetowej. W tym celu użyjemy selenu i webdrivera. Poniższy skrypt w Pythonie pobierze zrzut ekranu ze strony internetowej i zapisze go w bieżącym katalogu.

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

Możesz obserwować wyjście, jak pokazano poniżej -

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

Po uruchomieniu skryptu możesz sprawdzić bieżący katalog screenshot.png plik.

Generowanie miniatur dla wideo

Załóżmy, że pobraliśmy filmy ze strony internetowej i chcieliśmy wygenerować dla nich miniatury, aby można było kliknąć określony film na podstawie jego miniatury. Do generowania miniatur dla filmów potrzebujemy prostego narzędzia o nazwieffmpeg które można pobrać z www.ffmpeg.org. Po pobraniu musimy go zainstalować zgodnie ze specyfikacjami naszego systemu operacyjnego.

Poniższy skrypt w Pythonie wygeneruje miniaturę wideo i zapisze go w naszym katalogu lokalnym -

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

Po uruchomieniu powyższego skryptu otrzymamy miniaturę o nazwie thumbnail_solar_video.jpg zapisane w naszym katalogu lokalnym.

Zgrywanie wideo MP4 na MP3

Załóżmy, że pobrałeś jakiś plik wideo ze strony internetowej, ale potrzebujesz tylko dźwięku z tego pliku, aby spełnić swoje zadanie, wtedy można to zrobić w Pythonie za pomocą biblioteki Python o nazwie moviepy które można zainstalować za pomocą następującego polecenia -

pip install moviepy

Teraz po pomyślnym zainstalowaniu moviepy za pomocą poniższego skryptu możemy przekonwertować MP4 na MP3.

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

Możesz obserwować wyjście, jak pokazano poniżej -

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

Powyższy skrypt zapisze plik audio MP3 w katalogu lokalnym.