Googleの検索結果から画像をまとめてダウンロードする時に少し工夫が必要だった話

きくち
アドベントカレンダーのトップバッターを任せられました。がんばります
UEQareer Advent Calender 2016

今回はseleniumを使って見ようと思います
最近、画像の機械学習をしていて、画像が大量に必要になるんですが

これが結構めんどくさいです
前はgoogleの画像検索APIで大量に取得できたと思いますが
有料になったりして、無料だと一日に使える数が制限されていたりします

そこで、seleniumを使ってブラウザを操作して画像の検索結果から直接画像を手に入れようと思います

今回はrubyで書いていきます

画像の検索

渡されたキーワードから、検索を行う部分です
引数で渡されたキーワードで検索した結果を表示します

画像URLの取得

そのあと、検索結果に並んでいる画像をひとつ、ひとつダウンロードしていきます
並んでいるサムネイルでは画像サイズが小さくて使いもんぽにならないので
リンクを辿って、元の画像を取得しようと思います

画像をクリックして表示される詳細画面の要素の中から
元画像らしきURLを取得してリストに格納していきます

 

あとはリストに格納したURLから画像をダウンロードしていく

 

終わりかと思ったら、そうじゃない

実はこれだけだと、50枚ぐらいしか画像を手に入れることができません><
googleの画像検索の検索結果はスクロールするたびに新しい画像が読み込まれて
要素が増えていきます。

ですので、先にスクロールさせて要素を表示させた状態で
要素の取得を行ってリストに格納していくのです。

また、画面に収まっていない要素をクリックしようとすると
エラーが出るので
クリックする前に要素の位置までスクロールさせる処理が必要です

 

更に改良するには

検索結果をスクロールしていくと

「検索をもっと表示」というボタンが現れるので
ボタンが表示されたら、クリックして
またスクロールするという処理を加えれば
もっと多くの画像をダウンロードできるはずです