
- Python 網路爬蟲教程
- Python 網路爬蟲 - 首頁
- 簡介
- Python 入門
- 用於網路爬蟲的 Python 模組
- 網路爬蟲的合法性
- 資料提取
- 資料處理
- 影像和影片處理
- 處理文字
- 爬取動態網站
- 爬取基於表單的網站
- 處理驗證碼
- 使用爬蟲進行測試
- Python 網路爬蟲資源
- Python 網路爬蟲 - 快速指南
- Python 網路爬蟲 - 資源
- Python 網路爬蟲 - 討論
影像和影片處理
網路爬蟲通常涉及下載、儲存和處理網路媒體內容。 在本章中,讓我們瞭解如何處理從網路下載的內容。
簡介
我們在爬蟲過程中獲得的網路媒體內容可以是影像、音訊和影片檔案,以非網頁以及資料檔案的形式存在。 但是,我們是否可以信任下載的資料,尤其是在我們要下載並存儲到計算機記憶體中的資料副檔名方面? 這使得了解我們要本地儲存的資料型別至關重要。
從網頁獲取媒體內容
在本節中,我們將學習如何下載媒體內容,這些內容根據 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** 檔案。

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