← 返回教程目录
第 10 章 · 第 2 节 图片采集

关键词自动分类:下载时按关键词建文件夹

Auto-Categorize by Keyword: Folder per Topic

1 万张图全堆在一个文件夹,后期找图就抓狂。按关键词/主题自动建文件夹,是图片采集的标配。

1. 文件名 → 关键词 → 文件夹

import re


from pathlib import Path





def extract_keyword_from_url(url):


    filename = url.split('/')[-1].lower()


    name = re.sub(r'\.\w+$', '', filename)


    parts = re.split(r'[_ -]', name)


    return parts[0] if parts else 'uncategorized'





def categorize_download(url, base_dir='downloads'):


    keyword = extract_keyword_from_url(url)


    save_dir = Path(base_dir) / keyword


    save_dir.mkdir(parents=True, exist_ok=True)


    filename = url.split('/')[-1]


    save_path = save_dir / filename


    download_with_retry(url, save_path)





for url in urls:


    categorize_download(url)

2. 用外部关键词表分类(更准)

KEYWORD_MAP = {


    '小米': ['小米', 'xiaomi', 'mi13', '小米13'],


    '华为': ['华为', 'huawei', 'p60', 'mate'],


    '苹果': ['苹果', 'iphone', 'apple', 'ios'],


    '三星': ['三星', 'samsung', 'galaxy'],


}





def smart_categorize(url, keyword_map=KEYWORD_MAP):


    filename = url.lower()


    for category, keywords in keyword_map.items():


        for kw in keywords:


            if kw in filename:


                return category


    return '其他'





def categorize_download(url, base_dir='downloads'):


    category = smart_categorize(url)


    save_dir = Path(base_dir) / category


    save_dir.mkdir(parents=True, exist_ok=True)


    filename = url.split('/')[-1]


    save_path = save_dir / filename


    download_with_retry(url, save_path)
实战技巧:关键词表要宽进严出 — 把可能的拼写、缩写、英文名都列上,然后人工抽样检查 100 张图看分类是否合理,不准的再补关键词。

3. 重复图片去重(感知哈希)

from PIL import Image


import imagehash





def is_duplicate(img1_path, img2_path, threshold=5):


    h1 = imagehash.phash(Image.open(img1_path))


    h2 = imagehash.phash(Image.open(img2_path))


    return abs(h1 - h2) < threshold





import os


images = list(Path('downloads/小米').glob('*.jpg'))


seen_hashes = {}


for img_path in images:


    h = imagehash.phash(Image.open(img_path))


    if h in seen_hashes:


        img_path.unlink()


        print(f'删除重复: {img_path.name}')


    else:


        seen_hashes[h] = img_path

关键词分类 + 去重,1 万张图自动整理成 4-5 个清晰子文件夹,可以直接交付。

想跳过写代码,直接批量下高清图?

配套软件内置多线程下载 + 关键词分类 + 4K 优先,导入关键词即下

查看淘宝软件 →