💬
icrawl で 100 枚以上画像を取得するメモ
icrawl で max_num
ふやしても 100 枚しか取得できん...
検索サイト側の設定(pagenation?)が変わったようでいろいろ対策が必要でした
(icrawer の Document に書いてほしいね...)
解決
- 日付を設定
- file_idx_offset でファイル名オフセットを与える
で Google 画像検索ではとりあえずある程度いけます. 日付は新しいのを与えるとうまくいかなかったので, フレッシュな画像を求めるのでなければ, 1 年くらいの期間になるように指定するとよいでしょう.
の通りです.
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 使うとよいでしょう.
より高みを目ざす
検索エンジンからだといつ仕様が変わるかわかりません.
また, icrawer もドキュメントの整合性とれてなかったりパラメータがいつの間にか変わってたりと使いづらいです...
今後は, LLM, ChatGPT などでブラウジングを自動化してダウンロード(クロール)するツールが出てくるとおもうのでそれを使うといいかも?
(langchain など)
Discussion