2021年1月17日 星期日

[python抓爬仔]~~如何一次把整個月份的Google Doodle(Google塗鴉)全部抓取下來

 Google塗鴉(英語:Google Doodle)是Google為慶祝節日、紀念日、成就以及紀念傑出人物等而對Google首頁商標的一種特殊的臨時變更。

這些Google Doodle的設計通常都很吸引人,也相當有創意~很值得收藏細細品嘗啊!

這次,延續之前談的【簡單玩python】~~如何下載指定的網路圖片(資料),進一步結合對Google Doodle網站的分析,來實作如何一次將整個月份的Google Doodle圖檔全部下載下來!

通常要實作這類抓取網站資料的操作,都必須要先「分析」一下,該網站是怎麼將資料(圖檔)傳送到你的瀏覽器讓你看到相關的資訊!

由於每個網站的設計不盡相同,對於資訊的提供方式(或隱藏方式)也都各異,所以很難講說有甚麼一套標準方式,所以也只能且戰且走~~碰碰運氣了啦~~哈!(💪不知道就承認啦~還掰!)

以Google Doodle的展示頁面來看,可以依下列步驟分析:

1.從「Google首頁」點選「好手氣」進入

2.進入前(或進入後點選「重新整理」),開啟進入「開發人員工具」頁面

3.而後點選進入「Network→XHR」頁面,可以觀察到Google Doodle頁面是以json模式,按月份分別將Google Doodle圖檔資訊傳送。


4.傳送資訊的網址就是類似下列的型式(以2020/12月份,繁體中文資料為例):

https://www.google.com/doodles/json/2020/12?hl=zh_TW

而提供的json格式及內容,也可以在「preview」頁面中加以察看


5.其中對我們這次想要處理的:下載Google Doodle圖檔的操作而言,最重要的就是圖檔網址:「url」這個資料了!

有了Google Doodle圖檔的url,我們就可以結合之前的【簡單玩python】~~如何下載指定的網路圖片(資料)操作,將該月份中所有的圖檔用迴圈方式依序下載下來了!

好囉~~經過上述的解析後,我們就可以進入程式碼的撰寫了................

from urllib.request import urlopen, urlretrieve
import json, os

# 設定抓取2020/12月份的google doodle圖檔
re = urlopen("https://www.google.com/doodles/json/2020/12?hl=zh_TW")
doodies = json.load(re)     # 將抓取的json資料格式化

# 設定儲存Doodle的資料夾
dirname = "imgs/google-2020-12-doodles"

# 判斷該資料夾是否存在,不存在就先建立該資料夾
if not os.path.exists(dirname):
    os.mkdir(dirname)

# 以for迴圈依序將取得的doodle資訊加以讀取並下載至指定位置
for d in doodies:
    url = "https:" + d["url"]    # 需自行加上「https:」
    fpath = dirname+"/"+url.split("/")[-1]    # 指定儲存的位置及檔名
    urlretrieve(url, fpath)    # 將圖檔下載至指定位置

print(f"本次共抓取{len(doodies)}張google doodle圖檔!")

執行程式後,可以看到會自動建立指定的資料夾,並將該月份共24張(以本次操作為例)圖檔都下載儲存於該資料夾中了!

如何~~~開不開心啊........

~~~那假如要下載2020一整年每個月分的doodle並按月分別儲存,要怎麼做呢??

→→大家自己先想想看吧~~~如何依序從2020/1跑到2020/12月份呢

沒有留言:

張貼留言