比迪丽LoRA模型Python爬虫实战:自动化采集训练素材指南

📅 发布时间:2026/7/3 8:43:55 👁️ 浏览次数:
比迪丽LoRA模型Python爬虫实战:自动化采集训练素材指南
比迪丽LoRA模型Python爬虫实战自动化采集训练素材指南想训练一个专属的比迪丽LoRA模型第一步也是最头疼的一步往往就是找素材。网上图片零零散散手动一张张保存效率低不说还容易遗漏。今天咱们就来聊聊怎么用Python爬虫把这个繁琐的过程自动化高效地构建一个高质量的比迪丽角色图像数据集。整个过程我会带你从零开始用最实用的方法一步步实现从目标网站抓取、解析、清洗到最终整理成可用于Stable Diffusion训练的结构化数据。即使你之前没怎么写过爬虫跟着这篇指南也能轻松上手。1. 准备工作思路与工具选择在动手写代码之前我们先理清思路。我们的目标是自动化、合规地从公开的图片素材网站批量下载比迪丽或相关角色的高质量图片。这里有几个关键点需要注意目标网站选择我们必须选择那些明确允许爬取、或提供了API接口的图片网站。绝对要避开那些有明确反爬声明的站点尊重版权和网站规则是首要原则。一些大型的图库网站或专门的动漫角色图站是常见的选择。爬虫框架对于这种相对结构化的图片采集任务Requests库配合BeautifulSoup或lxml进行页面解析通常就足够了。它们轻量、灵活学习曲线平缓。像Scrapy这样的全功能框架更适合大规模、复杂的抓取任务我们这次先从简单的来。最终产出我们需要的不仅仅是一堆图片文件最好还能附带一些描述信息如标签、来源页面等整理成一个结构清晰的文件夹方便后续筛选和训练。所以我们的技术栈就定下来了Python Requests BeautifulSoup。如果你还没安装打开终端或命令提示符用下面的命令安装即可pip install requests beautifulsoup42. 实战第一步分析目标页面与抓取链接假设我们找到了一个合规的动漫角色图站并且通过观察发现搜索“比迪丽”后的列表页URL有规律可循比如是https://example.com/search?q比迪丽page1这样的格式。我们的第一步就是写一个函数来抓取列表页并从中提取出每个图片详情页的链接。import requests from bs4 import BeautifulSoup import time import os def fetch_image_links(base_url, query, max_pages3): 从搜索结果列表页抓取图片详情页链接 :param base_url: 网站搜索的基础URL :param query: 搜索关键词如 比迪丽 :param max_pages: 计划抓取的页数 :return: 图片详情页链接列表 all_links [] headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } for page in range(1, max_pages 1): # 构造每一页的URL url f{base_url}?q{query}page{page} print(f正在抓取第 {page} 页: {url}) try: response requests.get(url, headersheaders, timeout10) response.raise_for_status() # 检查请求是否成功 soup BeautifulSoup(response.content, html.parser) # 这里是关键你需要通过浏览器开发者工具找到详情页链接的HTML规律 # 例如所有详情页链接都在 classimage-item 的 a 标签里 link_elements soup.find_all(a, class_image-item, hrefTrue) for elem in link_elements: detail_link elem[href] # 确保链接是完整的URL处理相对路径 if not detail_link.startswith(http): detail_link https://example.com detail_link if detail_link not in all_links: # 简单去重 all_links.append(detail_link) print(f 第 {page} 页找到 {len(link_elements)} 个链接累计 {len(all_links)} 个) time.sleep(1) # 礼貌性延迟避免对服务器造成压力 except requests.RequestException as e: print(f抓取第 {page} 页时出错: {e}) break return all_links # 使用示例 if __name__ __main__: base_url https://example.com/search query 比迪丽 detail_links fetch_image_links(base_url, query, max_pages2) print(f总共获取到 {len(detail_links)} 个详情页链接)代码解释我们模拟了一个浏览器请求通过User-Agent头。循环构造每一页的搜索URL进行请求。用BeautifulSoup解析HTML根据你实际观察到的网页结构这里用class_image-item举例找到所有详情页链接。做了简单的去重和相对路径补全。每次请求后暂停1秒这是一个良好的爬虫礼仪。3. 实战第二步解析详情页并下载图片拿到详情页链接后下一步就是进入每个详情页找到高清图片的真实地址通常是img标签的src属性并把图片下载到本地。def download_images_from_links(detail_links, save_dirbulma_images): 根据详情页链接列表下载图片到本地 :param detail_links: 详情页链接列表 :param save_dir: 图片保存的目录 if not os.path.exists(save_dir): os.makedirs(save_dir) headers {User-Agent: Mozilla/5.0 ...} # 同上 downloaded_count 0 for idx, link in enumerate(detail_links): print(f处理链接 {idx1}/{len(detail_links)}: {link}) try: resp requests.get(link, headersheaders, timeout10) resp.raise_for_status() detail_soup BeautifulSoup(resp.content, html.parser) # 关键步骤找到高清大图的URL。规律需要自行分析。 # 例如图片在 img idmain-image 标签里 img_tag detail_soup.find(img, {id: main-image}) if img_tag and img_tag.get(src): img_url img_tag[src] if not img_url.startswith(http): img_url https://example.com img_url # 下载图片 img_data requests.get(img_url, headersheaders, timeout15).content # 生成文件名可以用索引或原文件名 file_name os.path.join(save_dir, fbulma_{downloaded_count:04d}.jpg) with open(file_name, wb) as f: f.write(img_data) downloaded_count 1 print(f 已下载: {file_name}) time.sleep(0.5) # 下载间隔 else: print(f 未在页面中找到图片) except Exception as e: print(f 处理链接时出错: {e}) continue print(f下载完成共成功下载 {downloaded_count} 张图片到 {save_dir} 目录。) # 使用示例 if __name__ __main__: # 假设我们已经有了 detail_links download_images_from_links(detail_links[:5]) # 先测试前5个链接核心要点find(img, {id: main-image})这行代码是最需要你根据目标网站实际情况修改的部分。你必须用浏览器的“检查元素”功能去找到高清图所在的img标签的特征可能是ID、class、或者其他属性。我们创建了专门的文件夹来保存图片并用数字序列命名方便管理。增加了更细致的错误处理确保一个链接失败不会影响整个任务。4. 数据清洗与去重提升素材质量下载下来的图片不可能全部完美符合要求。我们还需要进行一些后处理。4.1 基础清洗删除损坏或过小的图片我们可以用PILPillow库来快速检查图片是否有效以及过滤掉分辨率过低的图片。pip install Pillowfrom PIL import Image import os def clean_images(image_dirbulma_images, min_size(512, 512)): 清洗图片删除无法打开或尺寸过小的图片 :param image_dir: 图片目录 :param min_size: 可接受的最小尺寸宽高 valid_count 0 for file_name in os.listdir(image_dir): file_path os.path.join(image_dir, file_name) try: with Image.open(file_path) as img: img.verify() # 验证文件完整性 # 重新打开以获取尺寸verify后需要重新打开 with Image.open(file_path) as img_check: if img_check.size[0] min_size[0] and img_check.size[1] min_size[1]: valid_count 1 else: os.remove(file_path) print(f删除尺寸过小图片: {file_name}) except (IOError, SyntaxError, Exception) as e: print(f删除损坏图片: {file_name}, 错误: {e}) os.remove(file_path) print(f清洗完成。有效图片剩余 {valid_count} 张。)4.2 简单去重基于文件哈希完全相同的图片可能来自不同页面可以通过计算MD5哈希值来去重。import hashlib def deduplicate_images(image_dirbulma_images): 基于文件内容哈希值去重 hash_dict {} duplicates [] for file_name in os.listdir(image_dir): file_path os.path.join(image_dir, file_name) try: with open(file_path, rb) as f: file_hash hashlib.md5(f.read()).hexdigest() if file_hash in hash_dict: duplicates.append(file_path) print(f发现重复文件: {file_name} 与 {hash_dict[file_hash]}) else: hash_dict[file_hash] file_name except Exception as e: print(f处理文件 {file_name} 时出错: {e}) # 删除重复文件保留第一个出现的 for dup in duplicates: os.remove(dup) print(f去重完成。删除了 {len(duplicates)} 张重复图片。)5. 构建结构化数据集对于LoRA训练一个有条理的文件夹结构能极大提升效率。我们可以这样组织bulma_training_dataset/ ├── images/ # 存放所有清洗后的图片 │ ├── bulma_0001.jpg │ ├── bulma_0002.jpg │ └── ... ├── meta.csv # 可选元数据文件记录标签、来源等 └── README.txt # 数据集说明你可以手动整理也可以用脚本将清洗后的图片移动到images子文件夹。meta.csv文件可以用pandas库来创建记录下每张图片的文件名、可能抓取到的标签、来源URL等信息这对后续管理非常有帮助。import pandas as pd import shutil def organize_dataset(source_dirbulma_images, target_basebulma_training_dataset): 将图片组织成结构化数据集 image_target_dir os.path.join(target_base, images) os.makedirs(image_target_dir, exist_okTrue) meta_data [] for idx, file_name in enumerate(sorted(os.listdir(source_dir))): src_path os.path.join(source_dir, file_name) dst_path os.path.join(image_target_dir, fbulma_{idx:04d}.jpg) shutil.copy2(src_path, dst_path) # 这里可以添加从其他渠道获取的标签信息 meta_data.append({file_name: fbulma_{idx:04d}.jpg, tags: bulma, dragon ball, source: unknown}) # 保存元数据 df pd.DataFrame(meta_data) df.to_csv(os.path.join(target_base, meta.csv), indexFalse, encodingutf-8-sig) print(f数据集已整理至 {target_base} 目录。)6. 总结与建议走完这一套流程你应该已经拥有了一个专属于比迪丽的、初步清洗过的图像数据集。整个过程的核心其实就两步一是耐心分析目标网站的页面结构找准图片链接的规律二是编写稳健且礼貌的爬虫代码处理好异常并设置合理的请求间隔。在实际操作中你可能会遇到网站结构变化、反爬机制如验证码等问题。这时可能需要更复杂的策略比如使用Selenium模拟浏览器、处理登录会话或者寻找更友好的数据源如一些网站提供的公开API。最后要再次强调务必遵守目标网站的robots.txt协议尊重版权仅将爬取的数据用于个人学习和研究。有了高质量的数据集你的比迪丽LoRA模型训练就成功了一半。接下来就可以愉快地投入到SD WebUI或Kohya_ss的训练配置中去了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。