影像和影片處理



網路爬蟲通常涉及下載、儲存和處理網路媒體內容。 在本章中,讓我們瞭解如何處理從網路下載的內容。

簡介

我們在爬蟲過程中獲得的網路媒體內容可以是影像、音訊和影片檔案,以非網頁以及資料檔案的形式存在。 但是,我們是否可以信任下載的資料,尤其是在我們要下載並存儲到計算機記憶體中的資料副檔名方面? 這使得了解我們要本地儲存的資料型別至關重要。

從網頁獲取媒體內容

在本節中,我們將學習如何下載媒體內容,這些內容根據 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 中提取檔名

從網站下載內容後,我們還希望將其儲存在一個檔案中,檔名在 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 請求從 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

藉助以下程式碼行,我們可以獲取有關內容型別的特定資訊,例如 content-type:

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

您可以觀察到如下所示的輸出:

image/jpeg

藉助以下程式碼行,我們可以獲取有關內容型別的特定資訊,例如 EType:

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

您可以觀察到如下所示的輸出:

None

觀察以下命令:

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

您可以觀察到如下所示的輸出:

12636

藉助以下程式碼行,我們可以獲取有關內容型別的特定資訊,例如 Server:

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

您可以觀察到如下所示的輸出:

Apache

為影像生成縮圖

縮圖是一個非常小的描述或表示。 使用者可能只想儲存大型影像的縮圖,或者同時儲存影像和縮圖。 在本節中,我們將為上一節“從網頁獲取媒體內容”中下載的名為 **ThinkBig.png** 的影像建立縮圖。

對於此 Python 指令碼,我們需要安裝名為 Pillow 的 Python 庫,它是 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")

以上程式碼非常容易理解,您可以在當前目錄中檢查縮圖檔案。

網站截圖

在網路爬蟲中,一項非常常見的任務是擷取網站的螢幕截圖。 為了實現這一點,我們將使用 selenium 和 webdriver。 以下 Python 指令碼將擷取網站的螢幕截圖,並將其儲存到當前目錄。

From selenium import webdriver
path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
browser = webdriver.Chrome(executable_path = path)
browser.get('https://tutorialspoint.tw/')
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** 檔案。

Screenshot

影片縮圖生成

假設我們已從網站下載了影片,並希望為其生成縮圖,以便可以根據其縮圖單擊特定影片。 為了生成影片的縮圖,我們需要一個名為 **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 庫 **moviepy** 在 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 檔案到本地目錄。

廣告