Обработка изображений и видео

Веб-скрапинг обычно включает загрузку, хранение и обработку веб-мультимедийного контента. В этой главе давайте разберемся, как обрабатывать контент, загруженный из Интернета.

Введение

Веб-медиа-контент, который мы получаем во время парсинга, может быть изображениями, аудио- и видеофайлами в форме не веб-страниц, а также файлов данных. Но можем ли мы доверять загруженным данным, особенно в отношении расширения данных, которые мы собираемся загрузить и сохранить в памяти нашего компьютера? Поэтому важно знать, какие данные мы собираемся хранить локально.

Получение медиаконтента с веб-страницы

В этом разделе мы узнаем, как мы можем загрузить медиа-контент, который правильно представляет тип медиа на основе информации с веб-сервера. Мы можем сделать это с помощью Pythonrequests модуль, как мы делали в предыдущей главе.

Во-первых, нам нужно импортировать необходимые модули Python следующим образом:

import requests

Теперь укажите URL-адрес медиа-контента, который мы хотим загрузить и сохранить локально.

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

Используйте следующий код для создания объекта ответа HTTP.

r = requests.get(url)

С помощью следующей строки кода мы можем сохранить полученный контент как файл .png.

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

После запуска вышеуказанного скрипта Python мы получим файл с именем ThinkBig.png, в котором будет загруженное изображение.

Извлечение имени файла из URL

После загрузки содержимого с веб-сайта мы также хотим сохранить его в файле с именем файла, указанным в URL-адресе. Но мы также можем проверить, существуют ли дополнительные фрагменты в URL. Для этого нам нужно найти фактическое имя файла из URL-адреса.

С помощью следующего скрипта Python, используя urlparse, мы можем извлечь имя файла из URL -

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

Вы можете наблюдать результат, как показано ниже -

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

Вы можете наблюдать результат, как показано ниже -

'MetaSlider_ThinkBig-1080x180.jpg'

Как только вы запустите вышеуказанный скрипт, мы получим имя файла из URL.

Информация о типе контента из URL

При извлечении содержимого с веб-сервера с помощью запроса GET мы также можем проверить информацию, предоставленную веб-сервером. С помощью следующего скрипта Python мы можем определить, что означает веб-сервер с типом контента -

Во-первых, нам нужно импортировать необходимые модули Python следующим образом:

import requests

Теперь нам нужно предоставить URL-адрес медиа-контента, который мы хотим загрузить и сохранить локально.

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

Следующая строка кода создаст объект HTTP-ответа.

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

Теперь мы можем узнать, какую информацию о контенте может предоставить веб-сервер.

for headers in r.headers: print(headers)

Вы можете наблюдать результат, как показано ниже -

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

С помощью следующей строки кода мы можем получить конкретную информацию о типе контента, скажем, тип контента -

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

Вы можете наблюдать результат, как показано ниже -

image/jpeg

С помощью следующей строки кода мы можем получить конкретную информацию о типе контента, скажем, EType -

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

Вы можете наблюдать результат, как показано ниже -

None

Соблюдайте следующую команду -

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

Вы можете наблюдать результат, как показано ниже -

12636

С помощью следующей строки кода мы можем получить конкретную информацию о типе контента, скажем, Сервер -

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

Вы можете наблюдать результат, как показано ниже -

Apache

Создание эскизов для изображений

Миниатюра - это очень маленькое описание или представление. Пользователь может захотеть сохранить только эскиз большого изображения или сохранить как изображение, так и эскиз. В этом разделе мы собираемся создать миниатюру изображения с именемThinkBig.png загружен в предыдущем разделе «Получение медиа-контента с веб-страницы».

Для этого скрипта Python нам нужно установить библиотеку Python с именем Pillow, ответвление библиотеки изображений Python, имеющее полезные функции для управления изображениями. Его можно установить с помощью следующей команды -

pip install pillow

Следующий скрипт Python создаст миниатюру изображения и сохранит ее в текущем каталоге, добавив к файлу миниатюр префикс 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")

Приведенный выше код очень легко понять, и вы можете проверить файл эскиза в текущем каталоге.

Скриншот с веб-сайта

При парсинге веб-страниц очень распространенная задача - сделать снимок экрана веб-сайта. Для реализации этого мы будем использовать селен и webdriver. Следующий скрипт Python сделает снимок экрана с веб-сайта и сохранит его в текущем каталоге.

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

Вы можете наблюдать результат, как показано ниже -

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

После запуска скрипта вы можете проверить текущий каталог на наличие screenshot.png файл.

Создание эскизов для видео

Предположим, мы загрузили видео с веб-сайта и хотим создать для них эскизы, чтобы можно было щелкнуть конкретное видео на основе его эскиза. Для создания эскизов видео нам понадобится простой инструмент под названиемffmpeg который можно скачать с www.ffmpeg.org. После загрузки нам необходимо установить его в соответствии со спецификациями нашей ОС.

Следующий скрипт Python сгенерирует эскиз видео и сохранит его в нашем локальном каталоге -

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

После запуска приведенного выше сценария мы получим эскиз с именем thumbnail_solar_video.jpg сохранены в нашем локальном каталоге.

Копирование видео MP4 в MP3

Предположим, вы загрузили какой-то видеофайл с веб-сайта, но вам нужен только звук из этого файла для вашей цели, тогда это можно сделать на Python с помощью библиотеки Python под названием moviepy который можно установить с помощью следующей команды -

pip install moviepy

Теперь, после успешной установки moviepy с помощью следующего скрипта, мы можем конвертировать MP4 в MP3.

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

Вы можете наблюдать результат, как показано ниже -

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

Приведенный выше сценарий сохранит аудиофайл MP3 в локальном каталоге.