2020-05-27

不寫網路爬蟲程式、如何一次大量抓取所有圖片!《LIFE篇》



   心血來潮~突然想挖掘一下古老的台灣老照片(當然您也可以從中選擇您所要的),看能不能在這波疫情動亂人心浮燥的時刻裏,藉由翻翻舊照來感受時代的無情變遷,邊緬懷以前青澀的情愫邊順勢做個歷史大回顧!(喔、有感而發嗎?

    說起找尋老照片的入手途徑,這在網路的學術或公眾網站上或多或少提供不少的來源素材。不過大多也許是以從寫真集的摘錄,或是當時明信片的方式擷取出來為居多。想說有沒有專業級的收藏並具有時代歷史軌跡的一定水準的老照片規模.....找了一下、貌似說 Life(生活雜誌)有跟Google合作並已將其雜誌中近乎千萬張的陳年好貨照片都已存放至Google雲端圖庫資料庫上。

    響叮噹出名的美國 Life(生活雜誌)就不用多介紹了吧!那我們就衝著這Life來研究看看~看能否從中挖出一些典藏的好料東東。(邪笑中

    ★ 注意!

        For personal non-commercial use only:Life 老照片是僅可以個人跟非商業上使用。
    若要商業上使用需要購買授權獲得使用權!(請小心)

    嗯、嗯、翻閱了一會大夥都說這個 http://images.google.com/hosted/life 為入口網站......喔、標題為「LIFE photo archive hosted by Google」底端標示 2008 年創建的(哇靠~好久!),左下方寫有搜索訣竅是加上 source:life。疑?怪捏??明明右側就有搜索輸入框直接輸入關鍵字不就可以了不是嗎!?

    那、我們就試著在Search LIFE images 下方輸入 Taiwan 看看會找出什麼好料出來?



    啥咪?明明輸入 Taiwan 然後秀出一堆毫無相干的老照片!上方的網址列是search?q=source:life&tbm=isch 直接回歸到一般的Google 的搜索頁面,並主動地以source:life這關鍵字去搜索圖片(不信的話你把網址列的&tbm=isch給去掉,就變成搜索文字網頁囉~

    喔、喔、擺明這個 http://images.google.com/hosted/life 網站已經被棄用了啊!無論你在這個網站輸入任何關鍵字都是會帶您到此。好吧!點擊 For example: computer source:life 這個搜索範例來看看會引出啥東西?


      好啦~是跑出來Life(生活雜誌)中有關電腦 computer的圖片出來,但打死俺才不相信憑藉著這麼大的一家雜誌,有關電腦的照片才這幾張!?

    那、回歸正途讓我們輸入 taiwan source:life 看看有何結果?


    又是僅只給出幾張嚐鮮的老照片?(靠、太小氣了啊~
    難道......俺輸入的關鍵字有誤?對了!咱們是要老照片當然要用老的關鍵字咩~()嗯、嗯、台灣以前是叫福爾摩莎!那再度輸入 formosa source:life 看看有何結果?

    你、你、老木#$%#$#.....又被戲弄了!才換幾張不同的照片


    明明相關連的圖片有一堆!(請見右側下方列圖)
    但為何搜索結果不像一般結果會全部顯示出來呢?怪哉????
    就隨意點擊這張1950年代於嘉義機場正對P-51D「野馬」戰鬥機的發動機進行檢修的圖片

    呵、從Google搜索頁面又跳回來這個舊窩囉~

Formosa  
Date taken:January 1, 1950
Photographer:Carl Mydans
Size:1280 x 827 pixels (17.8 x 11.5 inches)

證明是要用Formosa 這個關鍵字沒錯,日期是1950年1月1日,拍攝者是鼎鼎大名的 Carl Mydans 原片尺寸為1280 x 827 像素。

    點擊右側Related images 下方的圖片,接下如同走馬燈似地可輪播放不同的圖。(給啥
你就看啥、沒得挑!!View full size 可得到大圖!

圖片來源:LIFE photo archive hosted by Google

    嗯、嗯、美美的一張P-51D「野馬」戰鬥機入手!!哎呀、浮水印好破壞畫面~

 這絕非最佳的方式!
既不能挑選圖也無從知道圖片數又有浮水印,實在太喪氣了~難道?以上這些手段都不對?看這些呆呆的網頁界面顯然的是過時了的技術.......嗯、嗯、想想看.....不斷搞新花招的Google在2008年後有發布了哪些新噱頭!?

    有了、有了、接下Google 還有推出的藝術與文化(Arts & Culture)服務,反正以前有叫Google Art Project等等稱呼,現在應該正名了吧!!

    那~我們前往 https://artsandculture.google.com/ 看看Life的好料是否搬家到此了呢?


    Google 藝術與文化順應潮流的響應式網站,蒐羅了來自 80 個國家地區超過 2,000 個博物館與文化機構的瑰寶,想必 Life(生活雜誌)也轉移至此了吧!!

    就讓我們在此用這 formosa 關鍵字 https://artsandculture.google.com/search?q=formosa 去尋寶囉~



    對了!對了!這才是我們要的結果~有正確的圖片數量、還有我們要的老照片一覽,最重要的是要高解析無碼的(喀、俺在說啥?假裝臉紅一下),說錯了是要原汁原味(疑?)無浮水印的好照片!!(瞧、左邊連孫立人將軍都不敢往右瞧

圖片來源:LIFE Photo Collection

    喂、看倌們別噴鼻血!藝術、藝術!學術研究!!

    在此我們是研究如何挖掘出老照片~    /asset/formosa/gAHMSswpX7bJ9Q
    gAHMSswpX7bJ9Q 應就是此張圖的ID 網址,在 asset 資產中的formosa項目內。可以如此解讀此網址結構吧!

    最前面的 source:life 如今又更名成 source:life photo collection 有了這個差異處。另外、在這個  https://artsandculture.google.com/search?q=formosa 中是要水平橫向拖移秀出接下的其他圖片,依舊還是有點不爽快~

    綜合網址結構還有網路大師們找出的方式,用 https://artsandculture.google.com/search/asset/?q=formosa 這個搜索網址才是最佳的瀏覽界面


    如何?這個滿版的界面才是最佳模式!不過、這2,977張的圖片中好像夾帶了不是LIFE的照片,連書中的插圖都跑進來了~那麼該如何顯示只要LIFE的老照片呢!?

    很簡單加入新的source :https://artsandculture.google.com/search/asset/?q=formosa&p=life-photo-collection


    如何?美女泡溫泉又更加浮上來咩(噗、有露點喔)~從原先的2,977張變成2,758張剔除了219張非LIFE歸屬的圖片

 如何一口氣抓下來?
  2,758張總不能一張一張抓吧!有沒有好方法!?不過要做到大量抓取之前,要先分析出縮圖檔的網址結構。

    對、對、美女泡溫泉一定不只2張還有其他張.....(疑?俺又在胡言亂語!拍謝
    這麼嚴肅的老照片史物研究課題,豈能用如此輕挑的態度去看待啊~


    就讓我們以學術研究剖析的心態去敲開這扇門吧!這裡、以盡量不寫程式為原則(例如網路爬蟲程式、其他特異功能的擴充功能插件等)利用手邊方便的基本工具,來去完成一口氣全部抓取下為其目的呦~

    首先、Google 瀏覽器先按F12開啟開發人員工具 (Chrome DevTools) ,去監視一下網頁網路 Network 的活動。

     然後執行 https://artsandculture.google.com/search/asset/?q=formosa 後,在右側Network活動一覽的縮圖網址中可找出此張美女泡溫泉的縮圖網址如下:https://lh6.ggpht.com/d9R8PD4h9N_ARGGBPOyPYZcZ4CumsTMxnfWeUr72YVbq8AvBMbS5OFlWEE4=w336-h218-pp-fcrop64=1,00990000ff86ffff-rw-v1

    接下、來解讀一下這些網址參數結構吧!

lh6:表分流的伺服器號碼,你可lh3~lh6(以此圖而言)。
w:縮圖的寬。
h:縮圖的高。
pp:保持圖片原比例,缺少處用黑色填補。
fcrop64:進階裁切設置,左上右下以四位數的十六進位數字進行定位。
rw:圖片的轉換格式為 WebP。(rj 為 JPEG、rp 為 PNG、rg 為 GIF)
v1:Jpeg、Gif 的參數。(v0 =Baseline Standard、v1 =Baseline Optimized、v2 =Progressive)

    也就是說上面的縮圖網址您可得到一張寬336高218像素以WebP格式的美女泡溫泉圖。

    「但、我們要的是大圖啊~眼絲充血、嘶喊著!縮圖尺寸哪夠瞧啊!

    好啦~好啦~你們的心聲都聽到了!管它後面什麼參數設定先一律去掉看看咩!!

圖片來源:LIFE Photo Collection

https://lh6.ggpht.com/d9R8PD4h9N_ARGGBPOyPYZcZ4CumsTMxnfWeUr72YVbq8AvBMbS5OFlWEE4 再以這個網址去瞇看看!(ps:如上圖現時刻是可正常顯示,往後Google會不會又搞鬼就不知囉~

    瞧~沒有後面的參數牽制,一張完整沒有浮水印的圖片(1200x775像素)就進入眼簾。

    「這個是原圖的尺寸嗎?講好的大圖捏~敲碗!)」

    靠、1200像素寬您還嫌不滿足,還真貪啊~乖、讓我們先搞定所有圖的抓取步驟,先求有再求精啊!!收起您流口水的下巴、好嗎?)後續去抓原圖尺寸的方法會多出幾道攻法接下再說給您聽。(應該會有吧!?

 如何獲取所有的縮圖網址列表?
  前面的一張範例圖可以得知只要有縮圖網址,就能得到經過Google 原圖壓縮後的最大邊為 1200 像素的圖片(而非原始圖片,如部落格、相簿等圖片限制)。

    透過開發人員工具 (Chrome DevTools)我們可以接收網頁上傳與收的網路活動資訊,也知道了縮圖網址的結構,那麼、我們只要攔截所有的縮圖網址不就OK了嗎!?



    在Network下的Filter 篩選框中輸入fcrop64 這個縮圖網址中的關鍵字串,下方一覽中就可以僅篩選出縮圖網址囉~(這樣看起來就比較清爽多了)接下、我們只要不斷下滑縮圖項目持續去接收縮圖網址。(上圖表此刻、從目前網頁瀏覽的60張Requests中過濾出來我們所要的20張縮圖


    一般捲到約400多張時會出現如上圖,此刻無論你怎樣向下捲動網頁的縮圖項目就再也跑不出新的出來了。這是Google的防禦機制嗎!?擋網路爬蟲嗎?

    別擔心、您只要重新載入此頁(Refresh)由於前面的400多張縮圖已先暫存至網頁瀏覽器的暫存區中(Cash),此時你重頭捲動時瀏覽器是會先去抓取暫存區中的縮圖們,直到捲到暫存圖沒有的時後,它才會又開始連外去抓取新的縮圖。上圖是已跑過第一回的暫停來到第二回的暫停時刻。(圖表已抓取到806張縮圖,證明是可持續抓下去的

圖片來源:LIFE Photo Collection
https://lh5.ggpht.com/ayAYdSgXvVidMM4mFIwu8f5_gDhZje7m4t8DVqsnyq9WVCiapy1tDqE8

    Google 怕您「狼吞虎嚥」一次抓太猛所設的上限值嗎?(笑)


    俺有點強迫症、至一覽表標題列處按滑鼠右鍵,直接把其他欄位項目的顯示全部給勾消掉,只留下Url 網址這一項。(除了前面Filter方式也可這樣玩,有沒有做此動作都無所謂啦~這在找右側縮圖跟網址也方便些咩~


    嗯、對的!這些縮圖網址就是我們要的。隨意在任一的縮圖網址處上按滑鼠右鍵,然後選 Copy → Copy all cURL (cmd) 這個指令,將所有的縮圖網址以 cURL 命令指令的格式給它複製下來。(呵、有俺愛用的cURL 下載指令捏~


    先貼上文字記事本上來看看這個縮圖網址結構,可以看出全都轉換成 curl 的cmd下載指令來,顯示出獲得此縮圖的指定Header (參數 -H)、設定Browser資訊(user-agent)等等一些有的沒的輔助參數設定。(先把此文字檔儲存下來

    接下來除黃色標示的區域是我們所想要提取出來的,其他一些附帶的資訊是都要過濾刪除掉的。(您可下拉捲動看看,會看到還有其他在取得網頁內容處理過程中,所有待會我們將不要資訊們

 使用超強力工具Notepad++清理並建立下載網址列表!
  這一由Formosa人(笑)所開發的最好用純文字編輯器Notepad++,接下來我們就使用它的特異功能來達到我們的目的。


    沒有Notepad++ 的人可去官網Downloads | Notepad++ 去下載它來使用。(強力推薦

    使用Notepad++去開啟此文字檔,一般接下的普通作法就是想辦法去一一刪除或以填空取代不需要的字串行列,上圖是以正則表達式(regular expression Notepad++ 是叫規則運算式-H ".* 的方式來將含有-H 的此列全部以填空來取代,接著行處理→刪除空行來達到此目的。

    但是、此文字檔內還是夾帶有一些非上述並沒有規則性的其他文字串行列要處理啊~無法一次去清理掉不要的行列


    利用Notepad++這個標記的功能,執行幾個動作就能完全只留下我們所要的行列。

    步驟一:搜尋→標記


    步驟二:標記標記該行:打勾搜索內容:curl "https://lh 全部搜索

    我們要保留的是https://lh......此行的資料,利用此關鍵字串將其標記起來。


    步驟三:搜尋→書籤→移除未標記行

    我們標記起來的行頭,顯示有藍色圓標。接下來反選擇未有標記的行列將其全部移除!


    如何!?瞬間一口氣將一些不要的全部清除掉,只留下我們所需的行列。若要把標記給清除只要 搜尋→書籤→清除所有書籤 就可以。


步驟四:搜尋→取代尋找內容:=.*取代為:規則運算式→勾選→全部取代

    這裡採用正則表達式的取代方式來將網址含 之後的所有字元全部取代成單一 字元。


    這樣我們的每一個圖檔網址都由半形引號給包住了。前面的curl 字串先不刪除,留下來待後面使用。

 使用curl 命令行下載工具!
  Curl 是透過命令指令端(cmd 視窗)藉由其指令下達,透過HTTP Protocol 來存取網路資源的工具。把它想像成DOS版的下載工具就好了~

沒有curl 的人可去官網Downloads - curl 去選擇系統版本來下載使用。Windows 直接下載已Packages好的:下載 curl 檔案 ,將其擺入可系統執行的路徑內即可。(例如:C:\\Windows 內

例如我們想要下載一張圖,透過網址抓取並順便給它取一個girl.jpg的下載檔名。
指令格式入下:

curl -o girl.jpg "https://圖網址"

非常簡單易懂不是嗎?那麼我們就把它全部轉換成此指令格式不就大功告成!!


步驟五:編輯→多欄插入(Alt+C)


步驟六:多欄插入表單 起始:1、增量:1、齊頭補零:打勾

    上圖游標要放在行頭見左上角箭頭),表從每行頭插入生成一個從1起頭每次加1的流水號碼,位數少的前面則以0來填空補齊。


    流水號在行頭添加完成,接下的動作就簡單多了~(呼、到此諸君還行吧!


步驟七:搜尋→取代尋找內容:curl取代為:.jpg 搜尋模式一般→勾選→全部取代


步驟八:多欄插入表單 插入文字:curl -o o 後面還有一空格喔~→插入


步驟九:另存他檔的方式,副檔名改成 .bat 的可命令執行檔案


步驟十:點擊此 .bat 檔案,就開始一一下載囉~

    看似手續繁雜,其實用順了1、2分鐘就可解決。若覺得往後還會用到就用Notepad++的錄製功能作成一個巨集來存儲動作下來備用。

 進階精準地的去搜索圖庫!
 是否意猶未竟呢? 好想再多多亦善充實自個的歷史廣度呢!?
 利用攝影師名字或主題相關的關鍵字等參數,來分門別類的蒐羅圖資吧!!


https://artsandculture.google.com/search/asset/?q=Carl-Mydans

Photographer: Carl Mydans 卡爾·邁當斯(哇~拍了10幾萬張
1907年5月20日 - 2004年8月16日
Carl Mydans was an American photographer who worked for the Farm Security Administration and Life magazine.

    我們也可以針對喜愛的攝影師去搜索!


https://artsandculture.google.com/search/asset/?q=Carl-Mydans+formosa

    也可在攝影師後面再加上地區或主題關鍵字來個精準複合搜索~

「等一等、到底美女泡溫泉有幾張照片啊~」

-- 待續? --

沒有留言:

張貼留言