Google Colab使用bing_image_downloader并行爬取图片的参数配置求助
解决方案
核心问题说明
你原有代码存在两处核心错误:
- 函数定义与传参不匹配:
scrape_bing仅定义接收1个df参数,但调用时传入了完全无关的i、j两个参数 - 任务逻辑未关联实际数据:你编写的双重循环遍历数字的逻辑,和df中要爬取的搜索词数据没有任何关联,也没有做df分片处理
修复后可运行代码
直接将单条搜索词作为最小并行任务,不需要手动拆分df,joblib会自动分配任务到对应进程:
import os import multiprocessing from joblib import Parallel, delayed from bing_image_downloader import downloader # 单条搜索词爬取逻辑,每次处理一个搜索任务 def scrape_single_term(search_term, target_fname): print(f"爬取关键词:{search_term}") downloader.download( search_term, limit=200, output_dir="FOLDERX", adult_filter_off=True, force_replace=False, timeout=60 ) # 重命名为目标文件夹名,增加存在判断避免报错 src_path = os.path.join("FOLDERX", search_term) dst_path = os.path.join("FOLDERX", target_fname) if os.path.exists(src_path): os.rename(src_path, dst_path) # 提前创建根输出目录,避免多进程同时创建冲突 os.makedirs("FOLDERX", exist_ok=True) # 启动并行任务,n_jobs设置为你需要的并发数,比如2 Parallel(n_jobs=2, verbose=10)( delayed(scrape_single_term)(row['search_term'], row['fname']) for _, row in df.iterrows() )
注意事项
- 不要把并发数
n_jobs设置过高,短时间大量请求会触发Bing反爬机制,导致IP被临时限制 - 如果搜索词包含特殊字符(比如示例中的
coffee.),可先打印src_path确认bing_image_downloader生成的目录名与预期一致,避免rename时找不到路径 verbose=10参数会输出并行任务进度,方便你在Colab中查看运行状态
内容的提问来源于stack exchange,提问作者Dai
相关产品推荐
相关产品推荐

