icrawler はなかなか問題のあるライブラリですが、久しぶりに起動させたら動かなくなっていました。ダウンロードされない状態です。
ここでは、以下のような TypeError: ‘NoneType’ object is not iterable というエラーが出る場合の対策を記します。
エラーメッセージ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
INFO - icrawler.crawler - start crawling... INFO - icrawler.crawler - starting 1 feeder threads... INFO - feeder - thread feeder-001 exit INFO - icrawler.crawler - starting 1 parser threads... INFO - icrawler.crawler - starting 1 downloader threads... INFO - parser - parsing result page https://www.google.com/search Exception in thread parser-001: Traceback (most recent call last): File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python36\lib\threading.py", line 916, in _bootstrap_inner self.run() File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python36\lib\threading.py", line 864, in run self._target(*self._args, **self._kwargs) File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python36\lib\site-packages\icrawler\parser.py", line 104, in worker_exec for task in self.parse(response, **kwargs): TypeError: 'NoneType' object is not iterable INFO - downloader - no more download task for thread downloader-001 INFO - downloader - thread downloader-001 exit INFO - icrawler.crawler - Crawling task done! |
対策
ライブラリはそのままで、GoogleImageCrawler を BingImageCrawler に変えれば良い。たったそれだけです。
たとえば以下のようなファイルの場合、
1 2 3 4 5 |
from icrawler.builtin import GoogleImageCrawler import sys import os crawler = GoogleImageCrawler( storage={"root_dir":"c:\\Users\\USERNAME\\Downloads\\sample" } ) crawler.crawl(keyword="スナネコ",max_num=50) |
このように修正してください。
1 2 3 4 5 |
from icrawler.builtin import BingImageCrawler import sys import os crawler = BingImageCrawler(storage={"root_dir":"c:\\Users\\USERNAME\\Downloads\\sample"}) crawler.crawl(keyword="スナネコ",max_num=50) |