マイペースなRailsおじさん

Ruby、Ruby on Rails、オブジェクト指向設計を主なテーマとして扱います。だんだん大きくなっていくRuby on Rails製プロダクトのメンテナンス性を損なわない方法を考えたり考えなかったりしている人のブログです。

RubyでWebスクレイピングしたい(ダウンロード編) ~Google画像検索で検索した画像をダウンロードしてくるgemを作りました~

ダウンロード編として、スクレイピングの方法を解説する記事を書く予定だったのですが、gemの公開をもって解説ということにします。 特にメンテしていく気は無いのですが、スクレイピングで色々とコツが必要だったので忘れないようにgemとして形にしました。

github.com

使い方

検索ワードと画像の数を入れて起動します。

$ gem install google_image_scraper
$ google_image_scraper 猫 10

裏で地道にダウンロードしているのでそこそこ時間かかります。 コマンドが正常終了すると、こんなかんじで画像が保存されています。

f:id:ytnk531:20210102230739p:plain

仕組み

下記6段階のステップを踏んでダウンロードします。

  1. Google画像検索で画像を検索
  2. 検索された画像をクリックして右側に詳細を表示
  3. 高画質な画像がダウンロードされるまで待つ
    1. 3.を繰り返す
  4. 画面をスクロールして追加の画像を読み込む
  5. 2に戻る

Google画像検索のHTMLの構造が複雑だったので、けっこう無理のある実装をしました。HTMLの構造が変わったらたちまち壊れることが想定されます。

  1. のステップは工夫が必要なところでした。 2.で表示された詳細ウィジェットに表示している画像は、最初は画質が荒いサムネイルなのです。遅延読み込みをしているらしく、少し待つと掲載元サイトにアップロードされている画像への直リンクに差し替えられて、高画質に表示されます。 f:id:ytnk531:20210102231553p:plain

かなり壊れやすい実装なのと、機能も最低限しか無いです。メンテしていくかは未定です。