画像取得モジュール 「icrawler」
「icrawler」とはwebクローラのためのモジュールであり、画像などを簡単にスクレイピングすることができます。
「コンテンツの個数」「キーワード」等を指定するだけでいとも簡単に画像などをダウンロードできちゃいます!
そんなモジュールの使い方を初心者向けに、解説を混ぜて紹介していきます。
Webクローラ:自動的にwebにおいてデータを周期的に収集し、データベース化すること。
スクレイピング:webサイトから情報を抽出するコンピュータソフト技術のこと。
インストール方法
インストールは簡単で、Pythonがインストールされている機器で
pip install icrawler
と入力するだけです。
windows での例 |
anaconda環境では次のように入力してインストールします。
conda install -c hellock icrawler
使用方法
最初に、icrawlerをインポートします。
検索エンジンは数種類ありますが、今回は Google の検索エンジンを使用します。
from icrawler.builtin import GoogleImageCrawler
from ~ import ○○ では、~というモジュールから○○というクラス(または関数)を取り入れることができます。
randomモジュールを用いて説明したいと思います。初めての方はこちらから学んでみてください。
note.mkmk.me: Pythonでランダムな小数・整数を生成する...
使ったことがある人は多いと思いますが、このモジュール内の randint()という関数を使うときには二種類のインポート方法があります。
簡単な例として、
import random
random.randint(1,100)
#1から100のランダムな数字を出力
というのが一般的です。
ですが 「from ~ import ○○」を用いるとこんな風に書けるんです。↓↓
from random import randint
randint(1,100)
#1から100のランダムな数字を出力
2行では何のメリットも感じないと思いますが、今回使用する icrawler などのクラスをインポートする際には短く書くことができます!
というわけでインポートが完了したら、さっそく使ってみます!!
google_crawler = GoogleImageCrawler(storage={'root_dir': 'your_image_dir'})
google_crawler.crawl(keyword='○○',max_num=100)
↑ こんな感じ |
google_crawler という変数にGoogleImageCrawler()というクラスを入れます。
storage={'root_dir': 'your_image_dir'}という行では、
'your_image_dir' ではまとめて保存する画像をまとめるフォルダ(ディレクトリ)の名前を指定できます。ひとまずこのままでいきます。
google_crawler.crawl(keyword='○○',max_num=100)という行では、
keyword = '○○' :実際にあつめる画像のキーワードを指定できます。
max_num=100:あつめる画像の枚数を指定できます。
上の画像での例でいうと、
「"your_image_dir"というフォルダに "dolphin" という検索キーワードで得る画像を最大100枚取得する」
というプログラムになります。
もちろん検索キーワードは日本語でも可能です。
実際にやってみます ↓↓
私の環境では、上記のプログラムを ' ictest.py 'というファイルにまとめました。
実行 |
実行中の画面 |
"Crawling task done!" と表示されたら完了! |
収集する画像は、実行したプログラムと同じフォルダにダウンロードされます |
'dolphin'で出てくる画像 (様々な権利によりモザイク加工しています) |
最大100枚で設定しましたが、取得できたのは55枚でした。
詳細は不明ですがおそらく一度のページに表示される画像を取得していると考えられます。
「いらすとや」でクローリングすると...
しっかり50枚取得できました!
forなどを利用するともっと効率よく取得することができます。
応用:いろいろな使い方
1. Google以外のエンジンでの検索方法
このモジュールではGoogle以外でも
- Baidu
- Bing
- Flickr
- とにかくいろんなサイト
- URLのリストから
このとき形式はGoogleと同じですが、
from icrawler.builtin import ○○ImageCrawler
○○_crawler = ○○ImageCrawler(storage={'root_dir': 'なんとかフォルダ'})
○○_crawler.crawl(keyword='△△',max_num=100)
プログラムの○○の部分に"Baidu"などを入れるだけです。
「とにかくいろんなサイトから」の場合は 〇〇の部分に" Greedy " とインポート
「URLリストから」の場合は少し変わります。
これはあらかじめ画像URLをテキストファイルとしてリスト化したものから画像を取得するものになります。
from icrawler.builtin import UrlListCrawler
urllist_crawler = UrlListCrawler(storage={'root_dir': 'your_image_dir'})
urllist_crawler.crawl('URL_Lists.txt')
URL_Lists.txtには、保存したい画像のURLを書き込むだけで完了します。
(あまり使わないかな?)
2. 条件フィルター
Google等で画像を収集するときに、色やタイプ・日付やライセンス(著作権など)に絞って検索できます。
Googleでの検索を例にとると、下のようなプログラムでできます。
from icrawler.builtin import GoogleImageCrawler
google_crawler = GoogleImageCrawler(storage={'root_dir': 'tests'})
filters = dict(
size='large',
color='orange',
date=((2017, 1, 1), (2022, 11, 30)))
google_crawler.crawl(keyword='ネコ', filters=filters,