(1時間4,000円の伴走型ビデオチャット指導も受付中!)
画像収集を自動化する魔法のツール:Pythonの「icrawler」入門
![]()
【Yuki】
Hirokiくん、こんにちは。今日は……あの、プログラミングで少し便利なライブラリを見つけたので、紹介してもいいでしょうか……?
![]()
【Hiroki】
Yukiさん、こんにちは!もちろんです。何についてのライブラリなんですか?
![]()
【Yuki】
はい。ええと、「icrawler」という名前のライブラリです。Hirokiくんは、機械学習の学習用データや、Webサイトに使うための画像をたくさん集めたいと思ったことはありませんか……?
![]()
【Hiroki】
あります!でも、一つずつ右クリックで保存していくのはすごく時間がかかるし、大変ですよね。
![]()
【Yuki】
そうですよね。手作業だと効率が悪いですし、何より疲れてしまいます。icrawlerを使うと、GoogleやBingといった検索エンジンから、指定したキーワードの画像を自動で、しかも数行のコードでダウンロードできるんです。今日はその使い方を、一緒に見ていけたらなと思います……。
icrawlerとは何か
![]()
【Yuki】
まず、icrawlerがどんなものかを簡単に説明しますね。icrawlerはPythonで書かれた、非常に強力で柔軟な画像クローリング・フレームワークです。単に画像をダウンロードするだけでなく、検索エンジン(Google, Bing, Baiduなど)や、写真共有サイト(Flickr)から画像を収集するための「クローラー」があらかじめ用意されています。
![]()
【Hiroki】
クローラーっていうのは、Web上の情報を自動で収集してまわるプログラムのことですよね?
![]()
【Yuki】
はい、その通りです。icrawlerの特徴は、ただ動くだけでなく「スレッド」を使って並列処理を行うので、画像を集めるスピードがとても速いことだと思います……。また、自分自身で新しいクローラーを作るための仕組みも整っているので、拡張性も高いんです。
![]()
【Hiroki】
へぇ、すごいんだなぁ。初心者でも簡単に扱えるものなんですか?
![]()
【Yuki】
ええ、基本的な使い方だけなら、本当に数行書くだけで大丈夫ですよ。わたしも、最初はこんなに簡単にできるなんて驚きました……。
準備をしましょう:インストール方法
![]()
【Yuki】
では、まずはicrawlerを使えるように準備をしましょうか。Pythonがインストールされている環境であれば、pipというコマンドを使って簡単に導入できます。
![]()
【Hiroki】
コマンドプロンプトやターミナルで実行すればいいんですね。
![]()
【Yuki】
はい、そうです。以下のコマンドを入力してみてください。
pip install icrawler
![]()
【Hiroki】
入力しました!……「Successfully installed」と出ました。これで準備完了ですね。
![]()
【Yuki】
はい、無事にインストールできたみたいで良かったです。これで準備は整いました。
実際に動かしてみましょう:Google検索から画像を取得する
![]()
【Yuki】
それでは、実際にGoogleから画像をダウンロードするコードを書いてみましょう。今回は例として「猫」の画像を10枚ほど集めてみることにしますね……。
![]()
【Hiroki】
猫、いいですね。癒やされます。
![]()
【Yuki】
ふふ、そうですね。では、以下のコードを書いて実行してみましょう。
from icrawler.builtin import GoogleImageCrawler
# 保存先のディレクトリを指定して、クローラーを初期化します
google_crawler = GoogleImageCrawler(storage={'root_dir': 'cats'})
# キーワードを指定して、画像を10枚ダウンロードします
google_crawler.crawl(keyword='猫', max_num=10)
![]()
【Hiroki】
えっ、これだけですか?
![]()
【Yuki】
はい、これだけで「cats」というフォルダが作られて、その中に10枚の猫の画像が保存されるはずです。
![]()
【Hiroki】
やってみます……。あ、本当にフォルダができて、画像がどんどん保存されていきます!これなら僕にもできそうです。
![]()
【Yuki】
よかったです。少し補足すると、storage={'root_dir': 'cats'} という部分で保存先のフォルダ名を指定しています。そして crawl メソッドの keyword で検索ワードを、max_num で取得したい最大枚数を指定しているんです。
より詳細な条件で検索する:フィルター機能
![]()
【Hiroki】
でも、ただ「猫」って検索するだけだと、たまに関係ない画像が混じったり、サイズが小さすぎたりすることもありますよね?
![]()
【Yuki】
そうですね……。そんな時は、「フィルター」機能を使うのがいいかもしれません。画像の色やサイズ、投稿された日付などで絞り込むことができるんです。
![]()
【Hiroki】
そんなこともできるんですね!
![]()
【Yuki】
はい。例えば、「大きめのサイズ」で「オレンジ色の猫」を「最近1週間以内」に投稿されたものから探す、といった指定が可能です。
![]()
【Hiroki】
それは便利そうですね。どうやって書くんですか?
![]()
【Yuki】
filters という引数を使います。こんな風に書いてみてください。
from icrawler.builtin import GoogleImageCrawler
google_crawler = GoogleImageCrawler(storage={'root_dir': 'orange_cats'})
# フィルター条件を設定します
filters = dict(
size='large', # 画像サイズを「大」に指定
color='orange', # 主な色を「オレンジ」に指定
date=((2023, 1, 1), (2024, 1, 1)) # 期間を指定する場合
)
# フィルターを適用して実行します
google_crawler.crawl(keyword='猫', filters=filters, max_num=5)
![]()
【Hiroki】
なるほど、辞書形式で条件を渡すんですね。
![]()
【Yuki】
はい。ただし、注意が必要なのは、検索エンジンによって指定できるフィルターの種類が少しずつ違うことです……。Googleで使えるものが、Bingでは使えないということもあるので、公式のドキュメントを確認しながら進めるのが確実だと思います。
![]()
【Hiroki】
検索エンジンごとのクセみたいなものがあるんですね。勉強になります。
Bingや他のサイトから集める方法
![]()
【Yuki】
Google以外にも、Bingなどを使いたい場合もありますよね。その時も、使い方はほとんど同じです。
![]()
【Hiroki】
クラス名を変えるだけでいいんですか?
![]()
【Yuki】
はい。例えばBingなら BingImageCrawler を使います。
from icrawler.builtin import BingImageCrawler
# Bing版のクローラーです
bing_crawler = BingImageCrawler(storage={'root_dir': 'bing_cats'})
bing_crawler.crawl(keyword='猫', max_num=10)
![]()
【Hiroki】
本当に使い方が統一されていて、覚えやすいですね。
![]()
【Yuki】
そうなんです。icrawlerの作者の方が、誰でも簡単に扱えるように設計してくださったおかげですね。他にも、Baidu(百度)用の BaiduImageCrawler や、Flickr用の FlickrImageCrawler などが標準で用意されています。
注意点とマナーについて:大切なこと
![]()
【Yuki】
あの、Hirokiくん。一つ、とても大切なことをお話ししてもいいでしょうか……。
![]()
【Hiroki】
はい、何でしょうか?
![]()
【Yuki】
プログラムで画像を自動収集するのはとても便利ですが、気をつけなければいけない「マナー」と「法律」があります。
![]()
【Hiroki】
マナーと法律……そういえば、勝手に画像を集めてもいいのかなって少し思っていました。
![]()
【Yuki】
まず一つは、相手のサーバーに負担をかけすぎないことです。短時間に大量のアクセスをすると、相手のWebサイトが動かなくなってしまうかもしれません。
![]()
【Hiroki】
それは大変だ……。icrawlerはそのあたり、大丈夫なんですか?
![]()
【Yuki】
icrawlerにはスレッド制限などの機能がありますが、デフォルトの設定であまりに多くの画像を一度に集めようとするのは控えたほうがいいですね。また、サイトの利用規約(robots.txtなど)でスクレイピングが禁止されていないかを確認することも大切だと思います……。
![]()
【Hiroki】
なるほど。道具が便利だからこそ、使う側の責任が大事なんですね。
![]()
【Yuki】
はい。もう一つは、著作権です。集めた画像にはすべて著作権者がいます。自分で見て楽しむ分には「私的使用のための複製」として認められることが多いですが、その画像を勝手にWebサイトに載せたり、販売したりしてはいけません。
![]()
【Hiroki】
機械学習の学習用データにするのはどうなんですか?
![]()
【Yuki】
現在の日本の著作権法(第30条の4)では、情報解析を目的とした利用は原則として認められていますが……それでも、権利者を不当に害さないよう、慎重に扱う必要があります。
![]()
【Hiroki】
わかりました。便利なツールだからこそ、ルールを守って正しく使います!
icrawlerの内部構造について(少し詳しく)
![]()
【Yuki】
Hirokiくんが将来もっと複雑なことをしたくなった時のために、icrawlerが裏側でどう動いているのか、少しだけお話ししますね……。
![]()
【Hiroki】
ぜひ教えてください!
![]()
【Yuki】
icrawlerは、大きく分けて3つの役割を持ったコンポーネントで動いています。
- Feeder(フィーダー): 検索結果のページURLなどを生成して、順番に並べる役割です。
- Parser(パーサー): ページの中から、画像の直リンクを見つけ出す役割です。
- Downloader(ダウンローダー): そのリンクから実際に画像をダウンロードして保存する役割です。
![]()
【Hiroki】
役割分担ができているんですね。
![]()
【Yuki】
はい。これを「スレッド」という仕組みで同時に並行して動かしているので、とても効率がいいんです。もしHirokiくんが「特定のニュースサイトからだけ画像を集めたい」と思ったら、このParserの部分だけを自分で書き換えることで、オリジナルのクローラーを作ることもできるんですよ。
![]()
【Hiroki】
へぇ、カスタマイズもできるんだ!プログラミングがもっと上手になったら挑戦してみたいです。
![]()
【Yuki】
その意気です。……あ、でも無理はしないでくださいね。まずは用意されている機能を使うだけでも、十分にいろいろなことができるはずですから。
icrawlerで特定のURLから画像を収集する
![]()
【Hiroki】
検索エンジンじゃなくて、特定のWebサイトにある画像を丸ごと集めたい時はどうすればいいんですか?
![]()
【Yuki】
その場合は、UrlCrawler というものを使うのがいいかもしれません。例えば、特定のサイトのページ内にある画像を全部取得したい時に便利です。
from icrawler.builtin import UrlCrawler
# 特定のURLを指定して収集します
url_crawler = UrlCrawler(storage={'root_dir': 'site_images'})
url_crawler.crawl(urls=['https://example.com/page1.html', 'https://example.com/page2.html'])
![]()
【Hiroki】
これもすごくシンプルですね。
![]()
【Yuki】
はい。ただ、これも先ほど言ったように、相手のサイトの迷惑にならないように気をつけてくださいね……。わたしも、自分が作ったサイトの画像が急に大量にダウンロードされたら、少しびっくりしてしまうかもしれません。
まとめと参考文献
![]()
【Yuki】
今日はicrawlerについてお話ししましたが、いかがでしたか……?
![]()
【Hiroki】
すごく分かりやすかったです!たった数行のPythonコードで、こんなに強力な画像収集ができるなんて驚きました。これからのプロジェクトで活用してみたいと思います。
![]()
【Yuki】
そう言ってもらえると、わたしも嬉しいです。……もしもっと詳しく知りたくなったら、以下のリンクを見てみてください。作者の方が公開している公式のドキュメントです。
![]()
【Hiroki】
ありがとうございます。英語のサイトみたいだけど、コードを読みながら頑張ってみます。
![]()
【Yuki】
Hirokiくんなら、きっと大丈夫だと思います。もし分からないことがあったら、またいつでも聞いてくださいね。わたしで良ければ、いつでも……お手伝いします。
![]()
【Hiroki】
はい、Yukiさん!また教えてくださいね。
![]()
【Yuki】
ええ、喜んで。……あ、もうこんな時間ですね。今日はここまでにしましょうか。お疲れ様でした。
![]()
【Hiroki】
お疲れ様でした!
![]()
【Yuki】
……ふぅ。……うまく説明できていたでしょうか。少し心配ですけれど、Hirokiくんが喜んでくれたみたいで、良かったです。……さて、わたしも少し、夜の作業に戻ろうと思います……。
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。
初心者から始められるPythonレッスン
● 月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
● テキストベースで時間を選ばない
● 4,000円/60分の伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

