Skip to content

[Python] 使用 google_images_download 套件批量下載 Google 圖片中的圖片

Last Updated on 2021-05-08 by Clay

前言

使用 Google 圖片搜尋圖片已經是現代人生活的一部分。不管是搜尋可愛的貓咪、作業的圖片、甚至是網路上可愛的美女 —— 不可否認,Google 的圖片搜尋就是這麼地方便、好用。

有時候,基於一些項目需求,我們很可能需要大量地從 Google 圖片上面取得我們所需要的圖片。這時候,使用人力手動一張張選取下載,似乎費盡了點。

那麼,使用程式語言來爬蟲呢?

是可以做到的,不過要我說的話,Google 圖片的搜尋頁面,可是相當難爬的。

所幸這種需求算是常常發生: Python 中的一個套件恰恰實現了這樣的功能 —— 這個套件的名字簡單明瞭,便是 google_images_download。

那麼,我便在這裡附上他們的 Github: https://github.com/hardikvasa/google-images-download

如果感興趣,可以直接參考他們的教學。


google_images_download

第一次使用,我們需要以 pip 來安裝這個套件。

pip3 install google_image_download

安裝好之後,我們首先先來看一段簡單的 Sample Code:

# -*- coding: utf-8 -*-
from google_images_download import google_images_download

response = google_images_download.googleimagesdownload()
arguments = {"keywords": "dog",
             "limit": 20,
             "print_urls": True}
paths = response.download(arguments)
print(paths)



首先,我們匯入我們要的 google_images_download 套件,然後下我們要的參數:

  • keywors: 我們要查詢的東西
  • limit: 我們要的圖片數量
  • print_urls: 是否印出網址連結

然後使用 download() 函式,就可以開始下載了。程式的輸出會告訴你有沒有圖片損壞,並在最下方提醒你這次下載有多少圖片損壞。

程式也會自動幫你在當前目錄底下創建 downloads/”你查的東西” 這個目錄,並將圖片自動放在裡面。


疑難雜症

每次當我們想要一口氣下載大量的圖片時,比如說我們一口氣把圖片的 limit 調成 1000:

# -*- coding: utf-8 -*-
from google_images_download import google_images_download

response = google_images_download.googleimagesdownload()

arguments = {"keywords": "dog",
              "limit": 20,
              "print_urls": True}

paths = response.download(arguments)
print(paths)



Output:

Looks like we cannot locate the path the 'chromedriver' (use the '--chromedriver' argument to specify the path to the executable.) or google chrome browser is not installed on your machine.

沒錯,只要圖片數量超過 100,我們似乎便無法再進行下載了。而越過這個限制的辦法,便是要我們設定好 “chromedriver” 的路徑才行。

我查詢過很多辦法,很多人說即使他們裝了 google 雲端硬碟桌面版依然無法運作。

關於這點,其實我有更快的辦法:

打開 google_images_download.py 原文件,找到下面這一行:

if limit < 101:
     raw_html = self.download_page(url) # download page



這行就是限制我們只能選擇 100 以內的 limit 的判斷,我們只要將其隨便修改:

if limit < 100000:
     raw_html = self.download_page(url) # download page



這樣就能簡單略過上面的那個問題了。

不過,根據我的測試,其實還有另一項問題,那是發生在我搜尋 dog 照片時,limit 設定 2000 的 Error:

Unfortunately all 2000 could not be downloaded because some images were not downloadable. 89 is all we got for this search filter!

沒錯!其實我們只找到了 89 張!

根據我查詢 Github 上大家對於這個問題的討論,我發現這可能是 Google Chrome 版本更新的造成的影響:以前 Google 只要一直往下滑,便會一直產生新的照片。但不知道是不是為了防止大家爬蟲(?),現在 Google Chrome 在搜尋照片時,會產生一個 “show more resutls” 的按鈕。

現在的 google-images-download 還沒有更新這方面的 Script,只能期待作者日後的更新了。

順帶一提,我分別在 Windows 和 Linux 的電腦上都測試了同樣的關鍵字,目前停下來的部份看起來是一致的。也許要跨過這個限制只能載舊版的 Chrome 瀏覽器也不一定。

Leave a Reply