2017-05-31 5 views
1

Ich habe ein Array mit vielen keywords:Wie kriechen mehrere Keywords mit Python icrawler

array = ['table', 'chair', 'pen'] 

I 5 Bilder von Google-Bildsuche für jedes Element in meinem array mit Python icrawler

durchsuchen wollen Hier

ist die Initialisierung:

from icrawler.builtin import GoogleImageCrawler 

google_crawler = GoogleImageCrawler(
    parser_threads=2, 
    downloader_threads=4, 
    storage={ 'root_dir': 'images' } 
) 

ich benutze eine Schleife jedes Element zu kriechen:

for item in array: 
    google_crawler.crawl(
    keyword=item, 
    offset=0, 
    max_num=5, 
    min_size=(500, 500) 
) 

Allerdings erhalte ich das Fehlerprotokoll:

File "crawler.py", line 20, in <module> 
    min_size=(500, 500) 
    File "/home/user/opt/miniconda3/envs/pak/lib/python3.6/site-packages/icrawler/builtin/google.py", line 83, in crawl 
    feeder_kwargs=feeder_kwargs, downloader_kwargs=downloader_kwargs) 
    File "/home/user/opt/miniconda3/envs/pak/lib/python3.6/site-packages/icrawler/crawler.py", line 166, in crawl 
    self.feeder.start(**feeder_kwargs)         
    File "/home/user/opt/miniconda3/envs/pak/lib/python3.6/site-packages/icrawler/utils/thread_pool.py", line 66, in start 
    worker.start()              
    File "/home/user/opt/miniconda3/envs/pak/lib/python3.6/threading.py", line 842, in start 
    raise RuntimeError("threads can only be started once") 
RuntimeError: threads can only be started once 

, die scheint, dass ich nicht google_crawler.crawl mehr als einmal verwenden kann. Wie kann ich das beheben?

Antwort

2

In der neuesten Version können Sie es so verwenden.

from icrawler.builtin import GoogleImageCrawler 

google_crawler = GoogleImageCrawler(
    parser_threads=2, 
    downloader_threads=4, 
    storage={'root_dir': 'images'} 
) 

for keyword in ['cat', 'dog']: 
    google_crawler.crawl(
     keyword=keyword, max_num=5, min_size=(500, 500), file_idx_offset='auto') 
    # set `file_idx_offset` to 'auto' will prevent naming the 5 images 
    # of dog from 000001.jpg to 000005.jpg, but naming it from 000006.jpg. 

oder wenn Sie diese Bilder in verschiedenen Ordnern herunterladen möchten, können Sie einfach zwei GoogleImageCrawler Instanzen erstellen.

from icrawler.builtin import GoogleImageCrawler 

for keyword in ['cat', 'dog']: 
    google_crawler = GoogleImageCrawler(
     parser_threads=2, 
     downloader_threads=4, 
     storage={'root_dir': 'images/{}'.format(keword)} 
    ) 
    google_crawler.crawl(
     keyword=keyword, max_num=5, min_size=(500, 500)) 
+1

ps: Sie können ein Problem auf Github für schnellere Antworten auslösen. –