【Python3】icrawlerを使って簡単に画像をスクレイピングする方法

2022年7月6日

おはこんばんにちは、せなです。

今回は画像集めの際に便利なライブラリ、icrawlerを使用した画像のスクレイピング方法を説明したいと思います。

インストール

pipとcondaどちらでもインストール可能です。
今回はpipでインストールしたいと思います。

pip install icrawler
or
conda install -c hellock icrawler

基本的な使い方

使い方はとても簡単です。
以下のコードを実行してみてください。

from icrawler.builtin import GoogleImageCrawler

google_crawler = GoogleImageCrawler(storage={'root_dir': '出力先ディレクトリパス'})
google_crawler.crawl(keyword='cat', max_num=10)

実行するとGoogle画像検索で「cat」と検索した際に出てくる画像をダウンロードしてくれます。
※下のイメージのようにダウンロードできた画像とできなかった画像も分かります。

取得された画像は以下のように保存されています。

本記はGoogle画像検索からスクレイピングを行なっていますが、

  • Baidu
  • Bing
  • Flickr

↑3つのサイトからも画像のスクレイピングを行うこともできます。

検索オプション付きの使い方

詳細な条件をつけてスクレイピングを行うこともできます。

下記は2022年1月1日から2022年6月30日までの期間で
商用利用可能な白い犬の画像をスクレイピングしています。

from icrawler.builtin import GoogleImageCrawler

google_crawler = GoogleImageCrawler(
    storage={'root_dir':'出力先ディレクトリパス'})
    filters = dict(
    type='photo',
    size='large',
    color='white',
    license='commercial,modify',
    date=((2022, 1, 1), (2022, 6, 30)))
google_crawler.crawl(keyword='dog', filters=filters, max_num=10)

オプションについては以下を参照してください。

  • type: 属性を指定
    • “photo”: 写真
    • “face”: 顔
    • “clipart”: クリップアート
    • “linedrawing”: 線画
    • “animated”: アニメーション
  • color: 色を指定
    • “color”: カラー
    • “blackandwhite”: モノクロ
    • “transparent”: 無色
    • “red”: 赤
    • “orange”: オレンジ
    • “yellow”:黄色
    • “green”: 緑
    • “teal”: 青緑
    • “blue”: 青
    • “purple”: 紫
    • “pink”ピンク
    • “white”白
    • “gray”: グレー
    • “black”: 黒
    • “brown”茶色
  • size: サイズ指定
    • “large”
    • “medium”
    • “icon”
    • “>640×480”: 任意のサイズ以上
    • “=1024×768”: 指定サイズと等しい
  • license: 権利指定
    • “noncommercial”: 商用利用不可
    • “commercial”: 商用利用可
    • “noncommercial,modify”: 変更を伴う商用利用不可
    • “commercial,modify”: 変更を伴う商用利用可
  • date: 期間指定
    • “pastday”: 過去1日
    • “pastweek”: 過去1週間
    • ((2022, 1, 1), (2022, 6, 1)): 任意期間の間
    • ((2022, 1, 1), None): 任意期間から現在

取得した画像は以下のような形でディレクトリに保存されていますね。

最後に

icrawler いいですね。
Beautiful Soupを使ってスクレイピングするのもいいですが、
割と面倒だったりするので、ちょっとした画像集めには使っていこうと思います。(テストデータ集めが捗りそうです。)

ではでは〜

Python

Posted by sena