面向 Windows 的 Pixiv 图片管理与下载桌面工具。项目使用 Electron 提供图形界面, 通过 Python 执行下载、TAG 补全、TAG 筛选和相似图片分析。
本仓库是 CWHer/PixivCrawler 的衍生版本,
基于上游提交 cd80acc 继续开发。当前默认分支为 main;上游更新不会自动合并,
而是经过兼容性审查后按需手工整合。
- 当前提供源码运行版,尚未提供安装程序、便携包或打包后的可执行文件。
- 桌面 GUI 主要面向 Windows 10/11;Cookie 加密和文件操作使用 Electron 的 Windows 系统能力。
- GUI 当前提供个人收藏下载和指定画师下载,不提供排行榜或关键词搜索入口。
- Python 模块中保留的其他爬虫类不属于当前 GUI 的主要验证范围。
- 下载当前 Pixiv 账号的公开收藏,可设置最大作品数量。
- 下载指定画师的所有可访问作品。
- 为每个任务设置流量上限;达到上限后停止继续下载。
- 最多同时运行 3 个普通爬虫任务,其余任务自动排队。
- 显示任务状态、进度和最多 2,000 行会话日志。
- 支持取消排队任务、停止运行任务,以及移除已经结束的任务记录。
- 根据中央 SQLite TAG 元数据库或图片目录内的兼容
tags.json筛选图片。 - 支持 TAG 精确匹配和模糊匹配。
- 默认将匹配图片移动到输出目录;勾选“仅预览,不移动图片”后只显示结果。
- TAG 筛选是本地文件任务,不占用爬虫任务槽位。
- 从
作品ID_p页码.扩展名格式的文件名识别 Pixiv 作品,例如144431180_p0.png。 - 请求 Pixiv TAG 信息并写入所有图片目录共用的中央 SQLite 元数据库。
- 同步维护图片目录内的
tags.json,兼容旧版本工作流。 - 已存在于中央元数据库的作品会直接复用,不重复请求 Pixiv。
- 默认使用 2 个工作线程,但全局限制为每 1.5 秒启动一个请求。
- 每处理 100 个作品保存一次检查点并暂停 30 秒,可在中断后重新运行续接。
- 连续遇到 3 次 HTTP 429,或收到 401/403 时停止任务,避免继续触发限流或认证错误。
- TAG 补全运行期间独占全部 3 个网络任务槽位,普通下载任务会继续排队。
- 按所选目录内实际存在的图片页统计 TAG 数量,并按数量降序显示。
- 同一作品的多页图片分别计数,同时显示对应作品数量。
- 点击 TAG 可在独立窗口中浏览该 TAG 对应的全部本地图片。
- 旧目录中的
tags.json会按需导入中央元数据库,已有 TAG 只合并、不静默删除。 - 图片移动到其他目录后,只要文件名仍保留作品 ID,仍可从中央元数据库找回 TAG。
- 使用 64 位感知哈希扫描 JPG、JPEG、PNG、WebP、BMP 和 GIF。
- 相似阈值范围为
0–64,默认值为6;数值越大,匹配范围越宽。 - 默认递归扫描子目录,也可关闭递归。
- 自动忽略同一 Pixiv 作品中页码不同的图片,减少正常多页作品的误报。
- 首次扫描在图片目录生成
.pixivcrawler-image-fingerprints.sqlite3指纹缓存; 后续只重新计算新增或发生变化的文件。 - 支持图片预览、使用默认应用打开、在资源管理器中定位、复制路径,以及确认后移入回收站。
- 删除指纹缓存文件可强制重新计算全部图片。
- Pixiv 用户 UID。
- 可选代理,例如
127.0.0.1:1080;非本机代理请填写完整的http://主机:端口地址。 - Pixiv Cookie。
- 图片保存目录。
- Python 命令或解释器绝对路径。
- 中央 TAG 元数据库路径。
设置会保存在 Electron 的用户数据目录。Cookie 使用 Electron safeStorage
调用 Windows 系统加密后保存,不会写入 pixiv_crawler/config.py;再次保存设置时,
Cookie 输入框留空会保留已经加密保存的值。
| 组件 | 要求 | 当前验证版本 |
|---|---|---|
| 操作系统 | Windows 10/11 64 位 | Windows |
| Conda | Miniconda 或 Anaconda | Conda 24.11.3 |
| Python | Python 3.11,推荐环境名 pixiv_py311 |
Python 3.11.13 |
| Node.js | 用于安装依赖和启动 Electron | Node.js 22.14.0 |
| npm | 随 Node.js 安装 | npm 10.9.2 |
| Electron | 由项目依赖自动安装 | Electron 42.3.3 |
还需要:
- 能够访问 Pixiv;如网络环境需要代理,请先准备可用的 HTTP 代理。
- 执行下载或 TAG 补全时需要有效的 Pixiv Cookie 和用户 UID。
- Python 依赖包括 Beautiful Soup、NumPy、Pillow、python-dotenv、Requests 和 tqdm,
具体固定版本以
requirements.txt为准。
git clone https://github.com/CCP101/PixivCrawler.git
Set-Location PixivCrawler应用会优先自动查找名为 pixiv_py311 的 Conda 环境,因此推荐使用这个名称:
conda create -n pixiv_py311 python=3.11 -y
conda activate pixiv_py311
python -m pip install -r requirements.txt如果环境已经存在,只需重新对齐依赖:
conda activate pixiv_py311
python -m pip install --upgrade -r requirements.txt
python -m pip check仓库包含 package-lock.json,首次安装推荐使用可复现的 npm ci:
npm cinpm start启动时应用按以下顺序选择 Python:
- 当前已经激活的
pixiv_py311。 - 从 Conda 安装目录、
CONDA_EXE、PATH和常见用户目录查找pixiv_py311。 - 调用
conda run -n pixiv_py311查询解释器路径。 - 找不到该环境时回退到系统
PATH中的python。
也可以在“应用设置”中填写其他 Python 3.11 解释器的绝对路径进行覆盖。
启动后先打开“应用设置”,填写:
- Pixiv 用户 UID:登录账号的数字 UID。
- 代理:可选;本机代理可写成
127.0.0.1:1080。 - Pixiv Cookie:从浏览器开发者工具中复制已登录 Pixiv 请求的完整
Cookie请求头值。 - 图片保存目录:收藏和画师下载任务的输出位置。
- Python 命令或路径:通常保持自动识别结果即可。
- TAG 元数据库:建议保留默认路径,或选择一个长期不会移动的 SQLite 文件。
保存设置时 UID、Cookie、图片目录、Python 和元数据库路径不能为空。 如果 Windows 系统加密不可用,应用会拒绝明文保存 Cookie。
- 完成应用设置。
- 进入“爬虫任务”。
- 选择“个人收藏”或“指定画师”。
- 设置最大作品数量或画师 UID,并填写流量上限。
- 点击“加入任务队列”。
任务记录和日志只在本次应用运行期间保存。关闭应用时,排队任务会被取消, 仍在运行的 Python 进程会被终止。
- 进入“TAG 筛选”。
- 输入 TAG,选择精确或模糊匹配。
- 选择源图片目录和输出目录。
- 首次操作建议勾选“仅预览,不移动图片”。
- 确认结果后取消预览选项,再执行实际移动。
如果中央元数据库中没有对应记录,GUI 会尝试读取源目录下的 tags.json。
- 确认文件名包含 Pixiv 作品 ID 和页码。
- 进入“TAG 补全”并选择图片目录。
- 启动任务并等待检查点保存。
- 任务因限流、认证失败或手工停止而中断时,更新 Cookie 或等待后重新运行即可。
不要同时启动外部脚本进行大量 Pixiv 请求;TAG 补全已经内置限速、批处理和重试策略。
- “TAG 统计”只统计所选目录顶层符合 Pixiv 命名规则的图片。
- “相似图片”默认递归扫描,并支持普通图片文件名。
- 相似图片页面的“移到回收站”会先显示确认对话框;其余扫描和预览操作不会自动删除文件。
| 数据 | 默认位置或行为 |
|---|---|
| GUI 设置 | Electron 用户数据目录中的 settings.json |
| GUI Cookie | settings.json 内的 Windows 系统加密数据 |
| 中央 TAG 元数据库 | Electron 用户数据目录中的 pixiv-metadata.sqlite3,可在设置中修改 |
| 兼容 TAG 文件 | 图片目录内的 tags.json |
| 相似图片缓存 | 扫描目录内的 .pixivcrawler-image-fingerprints.sqlite3 |
| 下载图片 | “应用设置”指定的图片保存目录 |
| 任务和日志 | 仅保存在当前运行会话 |
仓库根目录的 .env 仅供直接运行 Python CLI 时使用,并已被 Git 忽略:
Copy-Item .env.example .envPIXIV_COOKIE=你的完整 Pixiv Cookie不要把 Cookie 写入源码、命令行历史、截图、Issue 或 Git 提交。Cookie 失效后应及时更新; 如果怀疑泄漏,应先在 Pixiv 端撤销会话,再清理本地或远端历史。
GUI 通过以下 CLI 执行后台任务:
conda run -n pixiv_py311 python pixiv_crawler/cli.py --help当前 CLI 子命令为:
bookmark:下载当前账号的公开收藏。artist:下载指定画师作品。filter-tag:按 TAG 预览或移动图片。collect-tags:为本地图片补充 TAG。similar-images:扫描相似图片并输出 JSON。
直接调用需要认证的子命令时,通过环境变量传入 Cookie:
$env:PIXIV_COOKIE = "你的完整 Pixiv Cookie"
conda run -n pixiv_py311 python pixiv_crawler/cli.py bookmark --help确认环境名为 pixiv_py311:
conda env list
conda run -n pixiv_py311 python -c "import sys; print(sys.executable)"也可以把输出的解释器绝对路径填入“应用设置”。
Cookie 已失效或无权访问目标内容。更新 GUI 中保存的 Cookie 后重新运行。
任务会在连续 3 次 429 后自动停止。等待 Pixiv 限流恢复后重新运行,已有检查点会被复用。
先运行“TAG 补全”,或者确认源目录存在有效的 tags.json,并检查“应用设置”中的
中央 TAG 元数据库路径。
文件大小、修改时间或指纹算法版本发生变化时会重新计算。缓存不可用时仍可扫描, 但下次运行无法复用结果。
npm test
conda run -n pixiv_py311 python -m unittest discover -s tests -v
conda run -n pixiv_py311 python -m compileall -q pixiv_crawler image_mix tests
conda run -n pixiv_py311 python -m pip check本项目基于原作者 CWHer 的 PixivCrawler 修改, 依照 GNU General Public License v3.0 发布。原项目及其贡献者的著作权归各自权利人所有。