moxt

Just another Blog site

RubyとSeleniumを使って自動で画像をダウンロードする

      2015/07/03

はじめに

ディープラーニング旋風に触発されて機械学習に興味をもった。
前々から機械学習やってみたいと思っていたのだが、SURF、HOGといった特徴量の抽出のあたりが職人芸らしい、という噂を聞いて『そんな根性ないわ。。』と諦めていたのだが、ディープラーニングは特徴量の抽出すら機械がやってくれると聞いて、『あ、これはやろう』となったのだ。

機械学習の中でも、自分は画像の識別に興味を持っている。

画像識別をやるなら既存のデータセットを使ってでも十分可能。
なのだが、椅子とか戦闘機を分類することにはあまり興味が湧かない。
となると自らデータセットを作る必要がある。
1枚1枚丁寧に画像を集めるのも良いが、たぶん終わる頃には死んでいるだろう。
じゃあスクリプト使って画像集めをやろう、そう思ったわけだ。

どこで画像を集めるか

bing.comで集めることにした。
Googleより品揃え豊富な印象があったので。
他に良さそうなサイトがあれば知りたいなあ。

どうやって集めるか

タイトル通りSeleniumを使ってやることにした。
Rubyのバインディングを使う。
bingはクローリング対策が結構されている感じで、jsを実行できるクローラーが必要だった。
普通のクローラーだとjsは実行できない(と、思ってる)はず。
なので、nodejsのnightmarejsを利用してヘッドレス系クローラー軽く実装してみたが、htmlが複雑なclass構造でnightmarejsでサクッとやれる感じがしなかった(技量不足)。

と、いうわけで。
より人間の動きっぽさを実装しやすいと、自分の中で有名なSelenuimを使ってブラウザを自動操作しつつ画像をダウンロードしてみた。

コード

こんな感じ。

いちいちブラウザを立ち上げて処理をこなすようになっているため、よくあるクローラーと比較すると大分遅い。

機能ってほどでもないが、ちょい使えるようにした。

  • クエリを引数に与えられるようにした
  • ファイル名を自動でつけるようにした
  • スクロールさせて取得する画像の量を増やした(scrollを呼べば呼ぶほど沢山の画像がダウンロードできる)

で、こんな感じで呼び出せばOK

アレ

banされない程度にやろう。

 - プログラミング

336px




336px




  • このエントリーをはてなブックマークに追加
  • follow us in feedly

  関連記事

コードを雑に読むアプローチでScrapyを入門する

Scrapyはスクレイピング用フレームワークなので、登場人物多すぎてよく分からない。 彼らの関係性や役割を理解を深めるために『Data …

no image
iOSアプリの設計ってどうやるの?

ViewControllerに処理を詰め込みすぎて保守が大変になるのはあるあるネタですよね。 じゃあ、ViewControllerでやることってなんだろうって問われると、まあ、こんなんだろうなってフワッとしてる。 …

no image
フロントエンド開発のメモ

最近のフロントエンド開発ではビルドランナーを使うのが常識になってきてるみたいなので。 jspm的なもっと進んだやり方でも良いんだけど、pluginが少ない、文献が少ない、自身の技術力不足、ということでビルドランナーなやり方でやる。 …

ReactなComponent同士を連携させたい

実践的なサンプルに塗れてなんとなく使ってると破綻する。 分かってること、分かってないことを整理しておきたい。 …

no image
Androidアプリを作るために最低限必要な知識と未知の部分を列挙

作りたいアプリによって必要な知識は変わるかもしれないが。。 個人的過ぎて役に立たないが、整理がてら羅列してみる。 …

no image
NginxとPHP-FPMを使っていたらcurl_init()が無いとエラーが出た

参考リンク 解決策 …

no image
ファイルとかのパーミッションを再帰的に変更したい

あるディレクトリ以下全ファイルのパーミッションを再帰的に変更 chmod …

MacでDockerした感想文

Contents1 前提:DockerはLinux上でしか動かない1.1 …

Chef::Exceptions::ChecksumMismatch:というエラーの対処

今頃になってChefの話。 チェックサムの形式をミスってる可能性がある。 …

no image
Rubyのモジュール機能とRailsのHelperについて考える

Moduleとは 参考サイトを見ながら思ったことをメモ …