此程式之更新功能旨在觀察不同時代之插畫風格演進,請適量執行勿過度使用
安装依赖 Node.js
pnpm install原先透过在 lib/config.js 输入帐号密码自动取得 cookie 的方式似乎已停用,无法取得 public 权限。
- 下载电脑浏览器扩充功能 (如 Cookie-Editor)
- 登入网页版 Pixiv 后在右上角扩充功能拼图中,点击 Cookie Editor 图标
- 依序点击 This site -> 允许 -> Export -> json 即完成复制 (约200行,包含 domain,expirationDate等讯息)
- 在专案根目录建立
cookie/pixiv.txt - 在
cookie/pixiv.txt档案中贴上 Cookie 内容
- 必须先进入到此专案资料夹中执行
cd download-picture- 在powershell贴上下方的指令等待约2分钟,执行期间观察是否有输出如:
[20250726/1] 133074580 DL等信息
node index.js 20250726 --pages=6 --tag=女の子,オリジナル --block=スク水,地雷系 --block-group=[巨乳,自撮り]- 若使用Doker (
docker build -t pixiv-dl .)
docker run --rm -v "${PWD}/picture:/app/picture" pixiv-dl node index.js 20250726 --pages=6 --tag=女の子,オリジナル --block=スク水,地雷系 --block-group=[巨乳,自撮り]- 若使用release (進入執行檔所在資料夾)
.\pixiv-downloader.exe 20250726 --pages=6 --tag=女の子,オリジナル --block=スク水,地雷系 --block-group=[巨乳,自撮り]- 执行完成后进入"女の子_20250726"開頭的资料夹,检查里面是否有96个项目(67张單图片,27個多圖片)如果圖片少了,你的cookie可能是沒有登入的,沒辦法下載皮膚面積較大的圖片
- 再进入"_black"開頭的资料夹中检查是否有5张图片
- 133098384.png
- 133148911.png
- 133094526.png
- 133074546.jpg
- 133074487.jpg
node index.js 20240315node index.js --month=202403node index.js --year=2024node index.js --year=2024 --pages=10 `
--tag=想要的角色1,想要的角色2 `
--block=不想要的tag1,不想要的tag2 `
--noword=不想要的word1,不想要的word2- 会下载到picture资料夹中
- " `"是告诉vsxode终端机在同一行的符号(前面要有空格,cmd则是 ^)
- tag和tag之间用逗号分隔,但不能有空白(可从输出检查有无生效,记得删除复制来的逗号前的空白)
--content=all預設是illust,all可能有漫畫,但圖片較全面(建議加上,尤其是2010前)--folder=test創建一個資料夾放置本次下載的圖片--pages=页数: 指定下载页数 (每页约 50 张)- 例如:
--pages=5会下载前 250 张图片 (排行榜前 50%) --interval=毫秒: 设定请求间隔时间 (预设: 10ms)--orientation=方向: 筛选图片方向 ( landscape:横向 desktop:电脑萤幕比例 portrait:直向square:正方形)--mode=模式: 排行榜类型 (daily,weekly,monthly)
--id-range=起始ID-結束ID: 指定作品 ID 範圍進行下載- 例如:
--id-range=125000000-125001000會檢查 ID 125000000 到 125001000 的所有作品 - 不依賴日期,直接遍歷指定 ID 範圍內的作品
- 會創建格式為
日期_idrange_起始ID-結束ID的資料夾
--tag=标签1,标签2: 必须包含的标签 (OR 逻辑,须完全相同)--block=标签1,标签2: 排除的标签 (黑名单)--noword=关键字1,关键字2: 排除含有特定关键字的作品 (不须完全相同)
--block-group="[标签A,标签B],[标签C,标签D]": AND 群组黑名单- 当作品同时包含群组内所有标签时才会被排除
--block-group="[标签A,标签B)": 条件式黑名单- 如果作品有 标签A,则必须也有 标签B,否则会被排除
--association=選項1,選項2: 控制多圖作品的下載行為,可組合使用
one: 多圖作品只下載第一張圖片black: 完全跳過多圖作品,不下載任何圖片split: 多圖作品不使用子資料夾,直接存放在主目錄plate: 如果圖片數量超過10張則跳過該作品
# 跳過超過20張的多圖作品,其他多圖正常下載但不使用子資料夾
--association=split,plate- 無參數: 下載多圖作品的所有頁面,存放在以作品ID命名的子資料夾中
--nomanga: 檢查是否長和寬相差很多(超過10倍)
picture/
├── [第一个tag]_YYYYMMDD(檔案數量)/ # 单日下载
├── [第一个tag]_YYYYMM(檔案數量)/ # 整月下载
├── [第一个tag]_YYYY(檔案數量)/ # 整年下载
└── _black(檔案數量)/ # 被筛选掉的图片
图片ID.jpg or .png- ID前面加
https://www.pixiv.net/artworks/就是图片source - 日期/后面的数字是下载的页数
- 资料夹名称我拼错成了_black但是我懒得改,稍微注意一下
- 按照排行榜顺序依序下载
- 先请求 API 获取图片列表,再开始下载图片
- 每个请求都会检查是否已存在,避免重复下载,但隔日同图片会因档名相同而覆盖
原因: Rate Limiting (频率限制) 或需要登入查看
- 大多数情况是年龄限制内容,需要 Premium 帐户
- 会自动跳过并在 JSON 档案中标记为
state: "fail" - 可以用ai编写一个额外的程式,读取json档案,将这些图片一次性的显示在网页上
- ESOCKETTIMEDOUT: 30 秒內沒有收到伺服器回應(網路慢+下載多圖)
- aborted: 連接被中止(網路不穩定、伺服器斷開)
- socket hang up: 套接字掛斷(連接異常中斷)
- 重試次數: 最多自動重試 3 次(每張圖片獨立計算)
- 重試延遲: 遞增延遲(2秒 → 4秒 → 6秒)
- 超時時間: 每個圖片下載 30 秒超時
- 重試條件: 只有網路相關錯誤會自動重試,HTTP 4xx/5xx 不會重試
- 目前设定: 每 50 个请求休息 8 秒钟
- 请求计算:
- 下载一张图片 = 2 个请求
- 请求 JSON 资料 = 1 个请求
- 经验推测: 限制半个小时内的总下载次数
症状: 大量下载失败或被提示未登入 解决方法:
- 重新从浏览器复制 Cookie
- 贴上到
cookie/pixiv.txt - 无需更换帐号
预防措施:
- 当侦测到限制下载(HTTP 429)时,程式会自动停止继续下载
- 避免触发上面的封锁
每个下载资料夹都会产生 _tags.txt 档案,记录:
- 图片 ID 对应的所有标签、排名、頁數
- 在执行的过程当中,black里面的txt,图片档案,原因不明的复制到上一层资料夹当中,在执行结束后就会复原,不要去对他做搬移或删除(這可能是 Windows 檔案系統或防毒軟體的暫存行為)
- 如果因为网路遇到问题,图片下半部是灰色的,你先复制图片的名称,然后到txt里面去搜寻并将该行删除,再次执行程式就可以得到完整
- 复制不喜欢的图片档名
- 在
tag.txt中使用Ctrl+F搜寻该图片 - 查看该图片的所有标签
- 将不喜欢的标签加入到
--block参数中
- 存放被筛选条件排除的图片,可直接从 black 资料夹复制图片到主资料夹
tag.txt记录被排除的原因,如果发现误判,可以调整筛选条件
即使 JSON 中标示为 "finish",程式仍会:
- 检查资料夹中是否存在
tag.txt - 比对已下载的图片 ID
- 跳过已存在的图片,只下载新图片 所以仅是记录他曾被下载过
- 休息时间及权重: 可根据使用状况调整,目前设定可能过于保守
- 记忆体需求: 大量下载时会用到约2GB的记忆体
- 可以尝试把程式改成下载这个月之前,先查看json(若没有先请求)筛选出已出现在两个txt中并且statue不是fail的图片,再分别下载这些图片
- 一次请求一个月中所有API → 并行下载,确认下载完成再请求下一月
- 删除程式当中AI生成的无用功能
- 可以在cookie的資料夾中存放很多不同時間段的文字檔案,透過指令控制使用那一個就可以並行下載
- 確保最高畫質
- 嘗試下載被擋住(fail)的圖片
- 限制每年下載10張,下載同一tag的n年演進
- 较冷门图片:
--block=diaper,はいてな,腹肉,ぽっちゃり,bbw,SSBBW,肥満化,腹ワイパー,thicc,異形進化,髪行類,多脚ヤンヨ,ショタ,たくしあげ,へそ,腹筋,おちんちん,ルカメイ,男の子,創作男子,青年,ai,AI生成 - 较不雅图片:
--block=極上の乳,爆乳,巨乳,淫乳,みっぱい,おっぱい,魅惑の谷間,褐色むちむち,パンチラ,縞パン,ぱんつ,縞ビキニ,泥酔,お品書き,その後の続きを全裸待機,露出,女装,メスガキ,オスガキ - 较商业图片:
Abdl,夏亞專用機,Among Us,AMOGUS,薬屋,勝利の女神,BlueArchive,原神,新作予告,新刊
d:
cd download-picture
[Console]::OutputEncoding = [System.Text.Encoding]::UTF
node index.js --year=2025 --pages=10 --type=all --association=split `
--tag=横顔,無表情,軽蔑,見下し,見下した目,冷たい目,ジト目,睨み,上から目線,罵倒顔,蔑み顔,ゴミを見る目,冷笑,嘲笑,皮肉顔,ドS,不機嫌,見せてんのよ,セルフスカート捲り `
--block=天使 `
--block=diaper,腹肉,ぽっちゃり,bbw,SSBBW,肥満化,腹ワイパー,thicc,異形進化,髪行類,多脚ヤンヨ,ショタ,たくしあげ,腹筋,おちんちん,ルカメイ,男の子,創作男子,青年,新作予告,新刊,ai,AI生成 `
--noword=高達,北斗,ラオウ,孫悟空,ゴジラエヴォルヴ,機動戦士`
2>&1 | ForEach-Object {
[Console]::WriteLine($_)
$_
} | Select-Object -Last 3 | Out-File -FilePath "L3.txt" -Encoding utf8
$endTime = "結束時間: $(Get-Date -Format 'yyyy/MM/dd HH:mm:ss')"
Write-Host $endTime -ForegroundColor Cyan
$endTime | Out-File -FilePath "L3.txt" -Append -Encoding utf8