Обработка изображений и видео
Веб-скрапинг обычно включает загрузку, хранение и обработку веб-мультимедийного контента. В этой главе давайте разберемся, как обрабатывать контент, загруженный из Интернета.
Введение
Веб-медиа-контент, который мы получаем во время парсинга, может быть изображениями, аудио- и видеофайлами в форме не веб-страниц, а также файлов данных. Но можем ли мы доверять загруженным данным, особенно в отношении расширения данных, которые мы собираемся загрузить и сохранить в памяти нашего компьютера? Поэтому важно знать, какие данные мы собираемся хранить локально.
Получение медиаконтента с веб-страницы
В этом разделе мы узнаем, как мы можем загрузить медиа-контент, который правильно представляет тип медиа на основе информации с веб-сервера. Мы можем сделать это с помощью 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 в локальном каталоге.