Skip to content

About

pixiv下圖

Resources

Stars

0 stars

Watchers

1 watching

Forks

 
 

Latest commit

 

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

从 Pixiv 获取排行榜图片(支援筛选条件)

此程式之更新功能旨在觀察不同時代之插畫風格演進,請適量執行勿過度使用

安装依赖 Node.js

pnpm install

Cookie 设定(仅需一次)

原先透过在 lib/config.js 输入帐号密码自动取得 cookie 的方式似乎已停用,无法取得 public 权限。

新的 Cookie 获取方式:

  1. 下载电脑浏览器扩充功能 (如 Cookie-Editor)
  2. 登入网页版 Pixiv 后在右上角扩充功能拼图中,点击 Cookie Editor 图标
  3. 依序点击 This site -> 允许 -> Export -> json 即完成复制 (约200行,包含 domain,expirationDate等讯息)
  4. 在专案根目录建立 cookie/pixiv.txt
  5. 在 cookie/pixiv.txt 档案中贴上 Cookie 内容

使用方法

测试之执行指令

  1. 必须先进入到此专案资料夹中执行
cd download-picture
  1. 在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=[巨乳,自撮り]
  1. 执行完成后进入"女の子_20250726"開頭的资料夹,检查里面是否有96个项目(67张單图片,27個多圖片)如果圖片少了,你的cookie可能是沒有登入的,沒辦法下載皮膚面積較大的圖片
  2. 再进入"_black"開頭的资料夹中检查是否有5张图片
  • 133098384.png
  • 133148911.png
  • 133094526.png
  • 133074546.jpg
  • 133074487.jpg

常用范例

下载指定日期

node index.js 20240315

下载整月数据

node index.js --month=202403

下载整年数据

node index.js --year=2024

带筛选条件的下载

node 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 範圍下載模式

  • --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 获取图片列表,再开始下载图片
  • 每个请求都会检查是否已存在,避免重复下载,但隔日同图片会因档名相同而覆盖

错误处理

HTML response - blocked 错误

原因: Rate Limiting (频率限制) 或需要登入查看

  • 大多数情况是年龄限制内容,需要 Premium 帐户
  • 会自动跳过并在 JSON 档案中标记为state: "fail"
  • 可以用ai编写一个额外的程式,读取json档案,将这些图片一次性的显示在网页上

自動重試機制

  • ESOCKETTIMEDOUT: 30 秒內沒有收到伺服器回應(網路慢+下載多圖)
  • aborted: 連接被中止(網路不穩定、伺服器斷開)
  • socket hang up: 套接字掛斷(連接異常中斷)

  • 重試次數: 最多自動重試 3 次(每張圖片獨立計算)
  • 重試延遲: 遞增延遲(2秒 → 4秒 → 6秒)
  • 超時時間: 每個圖片下載 30 秒超時
  • 重試條件: 只有網路相關錯誤會自動重試,HTTP 4xx/5xx 不會重試

Rate Limiting 机制

  • 目前设定: 每 50 个请求休息 8 秒钟
  • 请求计算:
  • 下载一张图片 = 2 个请求
  • 请求 JSON 资料 = 1 个请求
  • 经验推测: 限制半个小时内的总下载次数

Cookie 过期或被封锁

症状: 大量下载失败或被提示未登入 解决方法:

  1. 重新从浏览器复制 Cookie
  2. 贴上到 cookie/pixiv.txt
  3. 无需更换帐号

预防措施:

  • 当侦测到限制下载(HTTP 429)时,程式会自动停止继续下载
  • 避免触发上面的封锁

Tag 管理系统

tag.txt 档案功能

每个下载资料夹都会产生 _tags.txt 档案,记录:

  • 图片 ID 对应的所有标签、排名、頁數
  • 在执行的过程当中,black里面的txt,图片档案,原因不明的复制到上一层资料夹当中,在执行结束后就会复原,不要去对他做搬移或删除(這可能是 Windows 檔案系統或防毒軟體的暫存行為)
  • 如果因为网路遇到问题,图片下半部是灰色的,你先复制图片的名称,然后到txt里面去搜寻并将该行删除,再次执行程式就可以得到完整

处理不喜欢的图片

  1. 复制不喜欢的图片档名
  2. 在 tag.txt 中使用 Ctrl+F 搜寻该图片
  3. 查看该图片的所有标签
  4. 将不喜欢的标签加入到 --block 参数中

Black 资料夹功能

  • 存放被筛选条件排除的图片,可直接从 black 资料夹复制图片到主资料夹
  • tag.txt 记录被排除的原因,如果发现误判,可以调整筛选条件

重复检查机制

即使 JSON 中标示为 "finish",程式仍会:

  1. 检查资料夹中是否存在 tag.txt
  2. 比对已下载的图片 ID
  3. 跳过已存在的图片,只下载新图片 所以仅是记录他曾被下载过

注意事项

效能调整

  • 休息时间及权重: 可根据使用状况调整,目前设定可能过于保守
  • 记忆体需求: 大量下载时会用到约2GB的记忆体

速度太慢

  1. 可以尝试把程式改成下载这个月之前,先查看json(若没有先请求)筛选出已出现在两个txt中并且statue不是fail的图片,再分别下载这些图片
  2. 一次请求一个月中所有API → 并行下载,确认下载完成再请求下一月
  3. 删除程式当中AI生成的无用功能
  4. 可以在cookie的資料夾中存放很多不同時間段的文字檔案,透過指令控制使用那一個就可以並行下載

代辦事項

  1. 確保最高畫質
  2. 嘗試下載被擋住(fail)的圖片
  3. 限制每年下載10張,下載同一tag的n年演進

推荐的TAG

  1. 较冷门图片: --block=diaper,はいてな,腹肉,ぽっちゃり,bbw,SSBBW,肥満化,腹ワイパー,thicc,異形進化,髪行類,多脚ヤンヨ,ショタ,たくしあげ,へそ,腹筋,おちんちん,ルカメイ,男の子,創作男子,青年,ai,AI生成
  2. 较不雅图片: --block=極上の乳,爆乳,巨乳,淫乳,みっぱい,おっぱい,魅惑の谷間,褐色むちむち,パンチラ,縞パン,ぱんつ,縞ビキニ,泥酔,お品書き,その後の続きを全裸待機,露出,女装,メスガキ,オスガキ
  3. 较商业图片: 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

About

pixiv下圖

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages