💬

icrawl で 100 枚以上画像を取得するメモ

2023/07/08に公開

https://icrawler.readthedocs.io/en/latest/index.html

icrawl で max_num ふやしても 100 枚しか取得できん...

https://github.com/hellock/icrawler/issues/79

検索サイト側の設定(pagenation?)が変わったようでいろいろ対策が必要でした
(icrawer の Document に書いてほしいね...)

解決

  • 日付を設定
  • file_idx_offset でファイル名オフセットを与える

で Google 画像検索ではとりあえずある程度いけます. 日付は新しいのを与えるとうまくいかなかったので, フレッシュな画像を求めるのでなければ, 1 年くらいの期間になるように指定するとよいでしょう.

https://github.com/hellock/icrawler/issues/79

の通りです.

from icrawler.builtin import GoogleImageCrawler
import datetime

n_total_images = 10000
n_per_crawl = 100

delta = datetime.timedelta(days=360)
end_day = datetime.datetime(2023, 1, 29)

def datetime2tuple(date):
    return (date.year, date.month, date.day)

for i in range(int(n_total_images / n_per_crawl )):
    start_day = end_day - delta
    google_crawler = GoogleImageCrawler(downloader_threads=4, storage={'root_dir': '/path/to/image'})
    google_crawler.crawl(keyword='<YOUR_KEYWORDS>', filters={'date':(datetime2tuple(start_day), datetime2tuple(end_day))}, file_idx_offset=i*n_per_crawl , max_num=n_per_crawl)
    end_day = start_day - datetime.timedelta(days=1)

重複除去

github issue にも記載ありますが, imagededup 使うとよいでしょう.

https://github.com/idealo/imagededup

より高みを目ざす

検索エンジンからだといつ仕様が変わるかわかりません.
また, icrawer もドキュメントの整合性とれてなかったりパラメータがいつの間にか変わってたりと使いづらいです...

今後は, LLM, ChatGPT などでブラウジングを自動化してダウンロード(クロール)するツールが出てくるとおもうのでそれを使うといいかも?
(langchain など)

Discussion