在 google colab 中使用 bing_image_downloader 并行处理图像抓取

Parallel-process image scraping with bing_image_downloader in google colab

我有一个 pandas 数据框(名为 df),如下所示:

search_term fname
banana fldr1
kiwi fldr2
coffee. fldr3

并且我正在使用以下 python 代码使用 search_term 抓取 Bing 中的图像,并将这些图像保存在 fname 中命名的文件夹中。

from bing_image_downloader import downloader

for index, row in df.iterrows():
    print(row['search_term'])
    downloader.download(row['search_term'], limit=200,  output_dir="FOLDERX", adult_filter_off=True, force_replace=False, timeout=60)
    os.rename(os.path.join("FOLDERX",row['search_term']), os.path.join("FOLDERX",row['fname']))

但我想 运行 同时进行此操作,因为我有很多搜索词要浏览。例如,如果有 10 search_term 个要通过,我希望并行处理 2 个作业,将搜索词分成 2 个并同时抓取图像。我在 google colab 中 运行ning 这个,到目前为止已经尝试过

import multiprocessing
from joblib import Parallel, delayed

def scrape_bing(df):
  for index, row in df.iterrows():
    print(row['search_term'])
    downloader.download(row['search_term'], limit=200,  output_dir="FOLDERX", adult_filter_off=True, force_replace=False, timeout=60)
    os.rename(os.path.join("FOLDERX",row['search_term']), os.path.join("FOLDERX",row['fname']))

Parallel(n_jobs=2)(delayed(scrape_bing)(i, j) for i in range(5) for j in range(2))

但我不知道如何修改 `delayed' 中的参数使其生效。请帮忙?

无需使用额外的索引进行迭代,您可以简化 scrape_bing 并在 Parallel 代码中迭代数据帧行。

def scrape_bing(search_term, fname):
    downloader.download(search_term, limit=200,  output_dir="FOLDERX", adult_filter_off=True, force_replace=False, timeout=60)
    os.rename(os.path.join("FOLDERX", search_term), os.path.join("FOLDERX", fname))


Parallel(n_jobs=2)(delayed(scrape_bing)(row['search_term'], row['fname']) for index, row in df.iterrows())