Python-web-scraping-processing-images-and-videos
画像とビデオの処理
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ファイルを保存します。