Stable Yogi Leather-Dress-Collection 数据准备:使用Python爬虫收集皮革设计素材

张开发
2026/4/16 10:19:52 15 分钟阅读

分享文章

Stable Yogi Leather-Dress-Collection 数据准备:使用Python爬虫收集皮革设计素材
Stable Yogi Leather-Dress-Collection 数据准备使用Python爬虫收集皮革设计素材在开始任何与皮革设计相关的AI项目之前比如用Stable Diffusion生成皮革服装概念图或者训练一个专门的皮革风格模型我们首先得解决一个最实际的问题素材从哪里来网上图片虽然多但零散、质量不一手动收集几百上千张图片简直是噩梦。这时候Python爬虫就成了我们的“数字采集员”。它能自动、高效地从合规的网站上把那些精美的皮革制品图片、设计稿“搬”到我们的电脑里整理得井井有条。今天我就带你一步步走通这个流程从零开始用Python构建一个属于自己的、高质量的皮革设计图像数据集。1. 准备工作环境与目标网站分析在动手写代码之前我们需要把“工具”准备好并且明确要去哪里“采集”。1.1 环境搭建与库安装我们主要会用到几个Python库它们各有分工requests负责向网站发送请求获取网页的原始代码。BeautifulSoup像一把“梳子”从杂乱的网页代码中精准地梳理出我们需要的图片链接。Pandas用来整理和保存我们收集到的图片信息比如名称、来源URL方便后续管理。os / pathlib帮我们在电脑上创建文件夹管理下载下来的图片文件。打开你的终端或命令行用一行命令就能安装好它们pip install requests beautifulsoup4 pandas如果你的网络环境导致安装缓慢可以考虑使用国内的镜像源比如加上-i https://pypi.tuna.tsinghua.edu.cn/simple。1.2 选择合适的素材来源这一步至关重要直接决定了我们数据集的质量和合法性。请务必遵守目标网站的robots.txt协议和版权声明。通常我们可以考虑以下几类合规来源开源设计平台例如Pixabay、Unsplash等提供大量高质量、可免费用于商业用途的图片是首选。电商平台商品图许多电商平台如一些大型国际电商的商品详情页图片清晰、背景干净非常适合作为素材。但务必注意仅将这些图片用于个人学习、研究和非商业的模型训练参考严禁用于直接商业用途或侵权。设计社区与作品集网站如Behance、Dribbble上面有设计师发布的高质量作品风格前卫是寻找灵感的好地方。使用时需尊重设计师的版权通常仅适合个人学习参考。为了本教程的演示我们将以一个假设的、结构简单的“设计师作品展示页”为例。在实际操作中你需要替换为目标网站的真实URL并仔细分析其页面结构。2. 核心实战编写图片爬虫假设我们要爬取的页面列出了多款皮革服装每款点进去有高清大图。我们的策略是先爬取列表页获取所有商品的链接再逐个进入详情页找到最高清的图片地址并下载。2.1 第一步分析页面结构定位目标这是爬虫成功的关键。使用浏览器的“开发者工具”按F12。打开目标列表页。右键点击一个商品标题或图片选择“检查”。在弹出的代码面板中观察包裹这个商品的HTML标签。它可能是一个div classproduct-item里面的图片链接在img src...标签里商品详情页链接在a href...标签里。记下这些标签的特征比如class或id的名称。2.2 第二步爬取列表页获取详情页链接现在我们开始写Python代码。首先获取列表页内容并解析出所有详情页的链接。import requests from bs4 import BeautifulSoup import pandas as pd import time import os # 目标列表页URL (此处为示例请替换为实际地址) list_url https://example-designer-site.com/leather-collection # 请求头模拟浏览器访问避免被简单反爬 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 } def get_detail_links(list_url, headers): 从列表页获取所有商品详情页的链接 print(f正在抓取列表页: {list_url}) try: response requests.get(list_url, headersheaders, timeout10) response.raise_for_status() # 检查请求是否成功 soup BeautifulSoup(response.content, html.parser) # 根据之前分析的结构找到所有商品项。这里假设每个商品链接在 classproduct-link 的a标签里 # 你需要根据实际网站结构调整选择器 product_links soup.find_all(a, class_product-link, hrefTrue) # 提取href属性并补全为完整的URL如果是相对路径的话 base_url https://example-designer-site.com detail_urls [] for link in product_links: href link[href] if href.startswith(http): full_url href else: full_url base_url href if full_url not in detail_urls: # 去重 detail_urls.append(full_url) print(f共找到 {len(detail_urls)} 个商品详情页链接。) return detail_urls except requests.RequestException as e: print(f请求列表页出错: {e}) return [] # 执行函数 detail_url_list get_detail_links(list_url, headers) print(前5个详情页链接:, detail_url_list[:5])2.3 第三步解析详情页下载高清图片得到详情页链接后我们逐个访问定位并下载图片。def download_image_from_detail(detail_url, headers, save_dirleather_images): 从单个详情页下载图片 try: resp requests.get(detail_url, headersheaders, timeout10) resp.raise_for_status() detail_soup BeautifulSoup(resp.content, html.parser) # 寻找高清图片。通常会在 img 标签或者某些网站的高清图在 data-src、data-original 属性里 # 示例1直接找img标签 img_tag detail_soup.find(img, {class: main-product-image}) # 示例2如果高清图在别的属性里 # img_tag detail_soup.find(div, class_image-zoom) 或类似容器 if img_tag: # 优先获取>from PIL import Image import os def basic_image_cleanup(image_dir, min_size_kb50, min_width300): 基础图片清洗 :param image_dir: 图片目录 :param min_size_kb: 最小文件大小(KB)过滤掉太小的文件可能是损坏的或图标 :param min_width: 最小图片宽度(像素)过滤掉尺寸太小的图片 valid_extensions (.jpg, .jpeg, .png, .webp) deleted_files [] for filename in os.listdir(image_dir): filepath os.path.join(image_dir, filename) # 检查文件扩展名 if not filename.lower().endswith(valid_extensions): print(f移除非图片文件: {filename}) os.remove(filepath) deleted_files.append(filename) continue # 检查文件大小 file_size_kb os.path.getsize(filepath) / 1024 if file_size_kb min_size_kb: print(f移除过小文件({file_size_kb:.1f}KB): {filename}) os.remove(filepath) deleted_files.append(filename) continue # 检查图片尺寸 try: with Image.open(filepath) as img: width, height img.size if width min_width: print(f移除尺寸过小图片({width}x{height}): {filename}) os.remove(filepath) deleted_files.append(filename) except Exception as e: print(f无法打开图片 {filename}可能已损坏: {e}) os.remove(filepath) deleted_files.append(filename) print(f基础清洗完成共移除 {len(deleted_files)} 个文件。) return deleted_files # 执行清洗 basic_image_cleanup(image_save_dir)3.2 分类与打标为后续使用做准备一个有条理的数据集价值更高。我们可以根据爬取时记录的信息来自哪个商品页或者根据图片内容需要更复杂的模型此处略过进行简单分类。import shutil def organize_by_source(csv_path, image_dir, organized_base_dirorganized_leather): 根据下载结果CSV中的信息将图片按来源可理解为按商品/系列分类到不同文件夹 df pd.read_csv(csv_path) # 假设CSV里有一列 ‘category’ 或我们可以从detail_url提取系列名 # 这里演示从URL中提取一个简单的分类标识例如URL路径的某一部分 for index, row in df.iterrows(): if row[status] success and pd.notna(row[save_path]): # 示例从detail_url中提取分类。例如URL为 .../collection/winter-jackets/123 # 我们可以取 ‘winter-jackets’ 作为分类名 url_parts row[detail_url].strip(/).split(/) # 假设分类名在倒数第二部分根据你的URL结构调整 category url_parts[-2] if len(url_parts) 1 else uncategorized category_dir os.path.join(organized_base_dir, category) os.makedirs(category_dir, exist_okTrue) src_path row[save_path] dst_filename os.path.basename(src_path) dst_path os.path.join(category_dir, dst_filename) try: shutil.copy2(src_path, dst_path) print(f已分类: {dst_filename} - {category}) except FileNotFoundError: print(f源文件不存在: {src_path}) print(图片分类整理完成。) # 执行分类整理 organize_by_source(download_results.csv, image_save_dir)4. 总结走完这一趟你应该已经拥有了一个初具规模的皮革设计图片库。整个过程的核心其实就三步分析网站结构找到图片藏在哪里写代码让程序自动去访问和下载最后把下载的图片整理干净。爬虫代码本身不复杂难点往往在于应对不同网站千变万化的页面布局这就需要你灵活调整BeautifulSoup的选择器。在实际操作中有几点经验值得分享一是务必设置访问间隔像代码里的time.sleep做个“礼貌”的爬虫二是做好异常处理网络请求总有可能失败程序要能跳过错误继续运行三是及时保存进度把成功下载的链接记录到文件里万一中断了可以从这里恢复不用重头再来。有了这批高质量的素材无论是用于Stable Diffusion的提示词研究观察皮革的光泽、纹理该如何描述还是作为LoRA模型训练的素材库你都有了扎实的“原材料”。接下来如何利用这些素材激发AI的创造力就是另一个有趣的故事了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章