Python-web-scraping-processing-images-and-videos

提供:Dev Guides
移動先:案内検索

画像とビデオの処理

Webスクレイピングには、通常、Webメディアコンテンツのダウンロード、保存、処理が含まれます。 この章では、Webからダウンロードしたコンテンツを処理する方法を理解しましょう。

前書き

スクレイピング中に取得するWebメディアコンテンツは、データファイルだけでなく、非Webページの形式の画像、音声、ビデオファイルでもかまいません。 しかし、ダウンロードしたデータを信頼して、特にコンピューターのメモリにダウンロードして保存するデータの拡張子を信頼できますか? これにより、ローカルに保存するデータの種類を知ることが不可欠になります。

Webページからメディアコンテンツを取得する

このセクションでは、Webサーバーからの情報に基づいてメディアタイプを正しく表すメディアコンテンツをダウンロードする方法を学習します。 前の章で行ったように、Python requests モジュールの助けを借りてそれを行うことができます。

まず、次のように必要な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からファイル名を抽出する

Webサイトからコンテンツをダウンロードした後、URLで見つかったファイル名を持つファイルに保存することもできます。 しかし、追加のフラグメントの数がURLにも存在するかどうかも確認できます。 そのためには、URLから実際のファイル名を見つける必要があります。

*urlparse* を使用して、次のPythonスクリプトの助けを借りて、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要求によってWebサーバーからコンテンツを抽出している間、Webサーバーから提供された情報を確認することもできます。 次のPythonスクリプトの助けを借りて、コンテンツのタイプでWebサーバーの意味を判断できます-

まず、次のように必要なPythonモジュールをインポートする必要があります-

import requests

次に、ダウンロードしてローカルに保存するメディアコンテンツのURLを指定する必要があります。

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

次のコード行は、HTTP応答オブジェクトを作成します。

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

これで、Webサーバーが提供できるコンテンツに関する情報を取得できます。

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

画像のサムネイルを生成する

サムネイルは非常に小さな説明または表現です。 ユーザーは、大きな画像のサムネイルのみを保存する場合と、画像とサムネイルの両方を保存する場合があります。 このセクションでは、前のセクション「Webページからメディアコンテンツを取得する」でダウンロードした ThinkBig.png という名前の画像のサムネイルを作成します。

このPythonスクリプトでは、Pillowという名前のPythonライブラリをインストールする必要があります。Pillowは、画像を操作するための便利な機能を備えたPython Imageライブラリのフォークです。 次のコマンドの助けを借りてインストールすることができます-

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

上記のコードは非常に理解しやすく、現在のディレクトリでサムネイルファイルを確認できます。

ウェブサイトからのスクリーンショット

Webスクレイピングで非常に一般的なタスクは、Webサイトのスクリーンショットを撮ることです。 これを実装するために、セレンとwebdriverを使用します。 次のPythonスクリプトは、Webサイトからスクリーンショットを取得し、現在のディレクトリに保存します。

From selenium import webdriver
path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
browser = webdriver.Chrome(executable_path = path)
browser.get('https://finddevguides.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 ファイルの現在のディレクトリを確認できます。

スクリーンショット

ビデオのサムネイル生成

Webサイトからビデオをダウンロードし、サムネイルに基づいて特定のビデオをクリックできるように、サムネイルを生成したいとします。 ビデオのサムネイルを生成するには、 www.ffmpeg.org からダウンロードできる ffmpeg というシンプルなツールが必要です。 ダウンロード後、OSの仕様に従ってインストールする必要があります。

次の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にリッピングする

Webサイトからビデオファイルをダウンロードしたが、目的に応じてそのファイルからの音声のみが必要な場合、次の支援でインストールできる moviepy というPythonライブラリの助けを借りてPythonでそれを行うことができますコマンド-

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ファイルを保存します。