ちょっと面倒だった。
情報源
手順
- インストール
- 使ってみる
1. インストール
$ pip install google_images_download
$ googleimagesdownload bash: googleimagesdownload: コマンドが見つかりません
pip3
でインストールしても同様……。
1-1. 環境変数パスを通す
こちらを参考にした。
$ pip show -f google_images_download
...
Location: /home/pi/.local/lib/python2.7/site-packages
...
Files:x
../../../bin/googleimagesdownload
...
$ export PATH="${PATH}:~/.local/bin"
例によって~/.bashrc
に上記export
文を書くことで自動化できる。
1-2. ヘルプ
なにこれ。ヘルプが雑でバージョンがヘルプで……。
$ googleimagesdownload --help usage: googleimagesdownload [-h] [-cf CONFIG_FILE] optional arguments: -h, --help show this help message and exit -cf CONFIG_FILE, --config_file CONFIG_FILE config file name
$ googleimagesdownload --version usage: googleimagesdownload [-h] [-k KEYWORDS] [-kf KEYWORDS_FROM_FILE] [-sk SUFFIX_KEYWORDS] [-pk PREFIX_KEYWORDS] [-l LIMIT] [-f {jpg,gif,png,bmp,svg,webp,ico}] [-u URL] [-x SINGLE_IMAGE] [-o OUTPUT_DIRECTORY] [-i IMAGE_DIRECTORY] [-n] [-d DELAY] [-co {red,orange,yellow,green,teal,blue,purple,pink,white,gray,black,brown}] [-ct {full-color,black-and-white,transparent}] [-r {labeled-for-reuse-with-modifications,labeled-for-reuse,labeled-for-noncommercial-reuse-with-modification,labeled-for-nocommercial-reuse}] [-s {large,medium,icon,>400*300,>640*480,>800*600,>1024*768,>2MP,>4MP,>6MP,>8MP,>10MP,>12MP,>15MP,>20MP,>40MP,>70MP}] [-es EXACT_SIZE] [-t {face,photo,clipart,line-drawing,animated}] [-w {past-24-hours,past-7-days}] [-wr TIME_RANGE] [-a {tall,square,wide,panoramic}] [-si SIMILAR_IMAGES] [-ss SPECIFIC_SITE] [-p] [-ps] [-pp] [-m] [-e] [-st SOCKET_TIMEOUT] [-th] [-la {Arabic,Chinese Simplified),Chinese (Traditional,Czech,Danish,Dutch,English,Estonian,Finnish,French,German,Greek,Hebrew,Hungarian,Icelandic,Italian,Japanese,Korean,Latvian,Lithuanian,Norwegian,Portuguese,Polish,Romanian,Russian,Spanish,Swedish,Turkish}] [-pr PREFIX] [-px PROXY] [-cd CHROMEDRIVER] [-ri] [-sa] [-nn] [-of OFFSET] [-nd] googleimagesdownload: error: unrecognized arguments: --version
使いそうな引数
引数は色々ある。使いそうなのを抜き出してみた。
引数 | 意味 | 値の例 |
---|---|---|
-k |
検索キーワード | '壁紙 夜空' |
-l |
ダウンロード上限数 | 10 (default:100 ) |
-s |
最低サイズ | >1024*768 |
-es |
正確なサイズ | 1920,1080 |
-r |
ライセンス | labeled-for-reuse-with-modifications labeled-for-reuse labeled-for-noncommercial-reuse-with-modification labeled-for-nocommercial-reuse |
-d |
ディレイ | 2 |
-nd |
ダウンロードしない | (none) |
-o |
出力先 | /tmp |
-n |
サブディレクトリなし | (none) |
-s
と-es
は併用できないらしい。*
と,
で統一されてない……。同一サイトなら2秒位ディレイしないとサーバ負荷が高いかも?。
名前や引数が整理されていない印象。
2. 使ってみる
URL取得
まずはURLのみ表示。
googleimagesdownload -nd -k "壁紙 夜空" -l 10 -es 1920,1080 -r labeled-for-reuse-with-modifications
Item no.: 1 --> Item name = 壁紙 夜空 Evaluating... Starting to Print Image URLS Image URL: https://images.pexels.com/photos/1047617/pexels-photo-1047617.jpeg?cs=srgb&dl=-1047617.jpg&fm=jpg Printed url without downloading Image URL: https://images.pexels.com/photos/459680/pexels-photo-459680.jpeg?cs=srgb&dl=nasa-sf-459680.jpg&fm=jpg Printed url without downloading Image URL: https://images.pexels.com/photos/262644/pexels-photo-262644.jpeg?cs=srgb&dl=-262644.jpg&fm=jpg Printed url without downloading Image URL: https://images.pexels.com/photos/991167/pexels-photo-991167.jpeg?cs=srgb&dl=cgi-991167.jpg&fm=jpg Printed url without downloading Image URL: https://images.pexels.com/photos/532040/pexels-photo-532040.jpeg?cs=srgb&dl=nasa-sf-532040.jpg&fm=jpg Printed url without downloading Image URL: https://images.pexels.com/photos/531995/pexels-photo-531995.jpeg?cs=srgb&dl=nasa-sf-531995.jpg&fm=jpg Printed url without downloading Image URL: https://get.pxhere.com/photo/croatia-early-morning-red-vintage-car-car-motor-vehicle-vehicle-sky-automotive-design-family-car-classic-zastava-750-city-car-mountain-road-trip-landscape-compact-car-vehicle-door-classic-car-subcompact-car-1433087.jpg Printed url without downloading Unfortunately all 10 could not be downloaded because some images were not downloadable. 7 is all we got for this search filter! Errors: 0 Everything downloaded! Total time taken: 1.2559430599212646 Seconds
これはURL文字列だけを抽出する作業が必要そう。
googleimagesdownload -nd -k "壁紙 夜空" -l 10 -es 1920,1080 -r labeled-for-reuse-with-modifications | grep -e '^Image URL: ' | sed -e 's/^Image URL: //g'
これさえ入手できればwget
, curl
などでダウンロード可能。
画像ファイル保存
googleimagesdownload -k "壁紙 夜空" -l 10 -es 1920,1080 -r labeled-for-reuse-with-modifications -o /tmp/work/wallpaper -n
Item no.: 1 --> Item name = 壁紙 夜空 Evaluating... Starting Download... Completed Image ====> 1. pexels-photo-1047617.jpeg Completed Image ====> 2. pexels-photo-262644.jpeg Completed Image ====> 3. pexels-photo-991167.jpeg Completed Image ====> 4. pexels-photo-531995.jpeg Completed Image ====> 5. pexels-photo-532040.jpeg Completed Image ====> 6. croatia-early-morning-red-vintage-car-car-motor-vehicle-vehicle-sky-automotive-design-family-car-classic-zastava-750-city-car-mountain-road-trip-landscape-compact-car-vehicle-door-classic-car-subcompact-car-1433087.jpg Unfortunately all 10 could not be downloaded because some images were not downloadable. 6 is all we got for this search filter! Errors: 0 Everything downloaded! Total time taken: 6.262312412261963 Seconds
- 6枚しか入手できていない……
- ファイル名にスペースが入れられている……
ライセンスの条件をとる。
mkdir -p /tmp/work/wallpaper/Yozora googleimagesdownload -k "壁紙 夜空" -l 100 -d 1 -es 1920,1080 -o '/tmp/work/wallpaper/Yozora/1920_1080' -n > /tmp/work/wallpaper/Yozora/log.txt
オフセットを指定して100番から200番をダウンロードしたかったが、100番のみダウンロードされた……。
$ googleimagesdownload -k "壁紙 夜空" -l 200 -of 100 -d 1 -es 1920,1080 -o '/tmp/work/wallpaper/Yozora/1920_1080' -n >> /tmp/work/wallpaper/Yozora/log.txt
100枚ずついい感じのを選びながら削除して、というのを繰り返したかったのに……。
不満
- 名前が長い
- 環境変数パスに自動で通してくれない
- ヘルプが謎。バージョンが出ない。
- ディレイ
- 同一サーバを対象にして他は同時がいい
- 重複チェック
- 既存の画像ファイルはダウンロードしないようにして欲しい
- マルチポスト除外(同一画像ファイルが異なるURLにある)
- ファイルサイズの上限を設けて欲しい
- 1ファイルあたりの上限
- 合計ファイルサイズ上限
- JSONデータにまとめて欲しい
- URL, Path, 検索順
- ゼロ埋め
- ファイル名の番号がゼロ埋めされていないため順番に表示できない
- 番号とファイル名の間にスペースが埋め込まれる(シェルのメタ文字……)
- オフセットどう使うかわからん
所感
スクレイピングさえしてくれればいい。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- python 2.7.13, pip 9.0.1
- python3 3.5.3, pip3 9.0.1
$ uname -a Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux