1

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

搜索词 名称
香蕉 fldr1
猕猴桃 fldr2
咖啡。 fldr3

我正在使用以下 python 代码在 Bing 中抓取图像search_term,并将这些图像保存在名为 in 的文件夹中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中运行它,到目前为止已经尝试过

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))

但我不知道如何修改“延迟”中的参数以使其工作。请帮忙?

4

1 回答 1

1

无需使用额外的索引进行迭代,您可以在代码中简化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())
于 2021-09-25T17:31:10.170 回答