2021年1月17日 星期日

【簡單玩python】~~如何下載指定的網路圖片(資料)

 網路資料擷取中,如何大量或抓取網頁(站)中的圖片,是網路資料擷取常被應用的區塊之一。

而要如何「爬取」網站中的圖檔,這部分涉及到:

1.如何解析網站內容,抓取網戰中的圖檔資訊,這部分涉及到網站的讀取及解析工作。

2.解析出網站中的圖檔資訊後,即可以網站圖檔的url進行圖檔的抓取(下載、儲存)

這次呢~~我們依然先從分解動作中,比較單純的網路圖檔的下載及儲存(也就是上述的第2階段)下手!

瞭解了網路圖檔如何下載儲存後,後面再來介紹如何爬取、解析網站中的圖檔資訊(例如:解析google Doodle的歷史圖檔),二者結合起來之後~~就可以驅動程式去自動抓取指定網站中的所有圖檔了!

好~~這次主要就是針對如何將網路資料(本次以下載圖檔為例)下載到本地端為操作目標。

主要的工具就是python中 urllib.request 的 urlretrieve() 函數

有關  urllib.request 的 urlretrieve() 函數  的詳細說明,可以參考以下網站資料:

https://docs.python.org/3/library/urllib.request.html#module-urllib.request

我們這次就是使用 urllib.request 的 urlretrieve() 函數 來下載、儲存指定的網路圖檔,並使用OpenCV來讀取並顯示下載後的圖檔,作為整個操作的設計目標。

這次示範預設要下載的圖檔是google Doodle 網站中的:

https://www.google.com/doodles/first-day-of-school-2021-january-04

圖檔位址:

https://www.google.com/logos/doodles/2021/first-day-of-school-2021-january-04-6753651837108833-2x.png

好囉~~~上程式碼囉:

# 抓取指定網路圖片的方法
from urllib.request import urlretrieve
import cv2

# 網路圖片url
img_url = 'https://www.google.com/logos/doodles/2021/first-day-of-school-2021-january-04-6753651837108833-2x.png'
fpath = "imgs/"+img_url.split("/")[-1]      # 設定儲存位置並以網路圖檔名稱為儲存檔名
urlretrieve(img_url, fpath)     # 將遠端(網路)資料下載到本地

r_img = cv2.imread(fpath)   # cv2讀取下載的圖檔
cv2.imshow("Net ImageUrl", r_img)   # 以cv2呈現讀取的圖檔

cv2.waitKey(0)
cv2.destroyAllWindows()

程式執行後,就可以看到呈現下載的圖檔視窗,並在指定的路徑中看到下載的圖檔囉!

檔名由於我們指定以網路圖檔的檔名進行儲存,所以你會在指定的目錄下看到「first-day-of-school-2021-january-04-6753651837108833-2x.png」這個檔案。

後記:可能會有朋友質疑說~~啊~網路圖檔按「右鍵」選擇「另存圖片」就行了啊,為什麼要用程式這麼不人性的方法去抓取、下載咧????

這就要跟大家回顧一開始談到的~~我們的目標是希望能結合網站內容的爬取及解析,並透過程式去自動抓取網站中的所有(大量)的圖檔,而無須「人工」一筆、一筆的去點選下載!

程式的好處是可以將複雜、重複、大量的工作,透過程式設計去強化、快速並自動化的去完成我們指定的工作。

當然~~若你只是想單純下載幾張網路圖片,那真的不必這麼麻煩啦~~~按「右鍵」選擇「另存圖片」就行了!

沒有留言:

張貼留言