神代綺凜

[Pxder] Pixiv 插画下载器
可按根据指定画师 UID 解析并下载插画(包括动图)、一键下载所有你关注的画师的插画或收藏的插画、智能增量更新下载...
扫描右侧二维码阅读全文
24
2018/08

[Pxder] Pixiv 插画下载器

可按根据指定画师 UID 解析并下载插画(包括动图)、一键下载所有你关注的画师的插画或收藏的插画、智能增量更新下载过的画师的插画。

多线程下载,并且支持使用 HTTP 与 SOCKS 代理。

Head Pic: 「五河琴里」/「秋原ノゾミ Sheila」のイラスト [pixiv]

Pxder

运行示例

因为 OX163 解析过慢,功能也不多,并且是龟速单线程下载;而一些油猴解析脚本例如 Pxer 因为浏览器权限原因只能解析而不能帮你下载,于是最终我还是决定自己写个 _(:3」」

此项目基于 Node.js,姑且算自己学习的副产物(实际上是不务正业的产物

最大的缺点是没有 GUI,纯命令行操作,不过也并不难用(信我),GUI 在后续开发计划中(咕咕咕

安装及使用等说明请直接看 Github 项目文档

注意

因P站域名遭到 GFW 的 SNI 阻断,这意味着只要你在大陆内,即便你改了 Hosts 也无法直接使用 pxder,请记得使用pxder --setting设置代理

从现在开始所有在评论中询问因未挂代理而产生的问题都将会被无视

更新日志

v2.7.3 - 20190730
因 API 限制,offset 超过 5000 时将不再继续请求

v2.7.0 - 20190402
加入程序更新检查功能
针对某些有 404 问题的插画调整下载重试逻辑

v2.6.2 - 20181124
优化下载重试逻辑

v2.6.1 - 20181122
抗连接重置
优化下载重试逻辑

v2.6.0 - 20181122
动图压缩包名字加入 delay 信息(帧速)
在收集画师/画作时显示具体进度

v2.5.5 - 20181014
(大概也许可能差不多)修复了按PID下载时的重试问题
支持多参数,流程串行(例如pxder -fFbB

v2.5.4 - 20180920
修复一切因插画标题含有 ASCII 不可见字符引起的非法文件名问题

v2.5.3 - 20180916
修复插画标题含有制表符导致的非法文件名问题
修复按画师下载的问题

v2.5.1 - 20180913
修复下载私密收藏插画功能异常的问题

v2.5.0 - 20180908
使用更可靠的路径存放配置文件,解决权限问题
增加及优化按PID下载功能

v2.4.2 - 20180904
按关注画师下载时无视“Pixiv事務局”

v2.4.1 - 20180831
修复收藏插画下载异常

v2.4.0 - 20180827
增加下载收藏插画的功能
优化按关注画师下载

TODO

  • 开发 GUI

搬瓦工VPS优惠套餐,建站稳如狗,支持支付宝,循环出账94折优惠码BWH3HYATVBJW
年付$47CN2线路,1核/1G内存/20G硬盘/1T@1Gbps【点击购买】($28套餐已经不再销售)
年付$47CN2 GIA线路,1核/512MB内存/10G硬盘/500G@1Gbps【点击购买】(可能已售罄)
Last modification:August 12th, 2019 at 03:46 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

256 comments

  1. 流毒  Windows 10 x64 Edition(Windows 10 x64 Edition) / Opera 66.0.3515.72(Opera 66.0.3515.72)
    大佬你好,我自作主张修改了一些代码,我想说下大致修改
    用一个变量储存当前下载的作者uid,缓存目录下根据uid创建文件夹,图片先下载到这个文件夹,
    下载完之后删除缓存目录+'/'+uid
    每次开始下载时判断是否存在缓存目录+'/'+uid这个文件夹,如果存在则continue;跳过,
    这样实现了程序多开同时下载
    最后我加了个tmpjson的写入,每次获取关注就写入一次,
    就不用因为没有一次性获取完没有把tmpjson写入而导致重新获取
    其他的简单的修改就是我改了下线程限制,我觉得32线程太少了,我改成上限320,默认64了
    (描述的不够详细的话可以回复我,我录制使用视频)
    1. 流毒  Windows 10 x64 Edition(Windows 10 x64 Edition) / Opera 66.0.3515.72(Opera 66.0.3515.72)
      @流毒
      该评论仅登录用户及评论双方可见
  2. 流毒  Windows 10 x64 Edition(Windows 10 x64 Edition) / Opera 66.0.3515.72(Opera 66.0.3515.72)
    TypeError: data.user_previews is not iterable
    at addToFollows (C:\Users\86243\AppData\Roaming\npm\node_modules\pxder\src\index.js:202:31)
    at runMicrotasks ()
    at processTicksAndRejections (internal/process/task_queues.js:94:5)
    at async PixivFunc.getMyFollow (C:\Users\86243\AppData\Roaming\npm\node_modules\pxder\src\index.js:214:4)
    at async PixivFunc.getAllMyFollow (C:\Users\86243\AppData\Roaming\npm\node_modules\pxder\src\index.js:249:21)
    at async PixivFunc.downloadFollowAll (C:\Users\86243\AppData\Roaming\npm\node_modules\pxder\src\index.js:302:4)
    at async C:\Users\86243\AppData\Roaming\npm\node_modules\pxder\bin\pxder:71:22
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 80.0.3987.87(Google Chrome 80.0.3987.87)
      @流毒 是不是没有关注啊……
    2. 流毒  Windows 10 x64 Edition(Windows 10 x64 Edition) / Opera 66.0.3515.72(Opera 66.0.3515.72)
      @流毒 重新安装了pxder也是这样orz
  3. 小千东  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 79.0.3945.130(Google Chrome 79.0.3945.130)
    大佬,可不可以增加一个功能:按照pid大量下载图片时,若是画师已经删除了作品,就会跳过这个pid(现在只要pid里存在删除的作品就不会执行下载,很不方便)MK
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 79.0.3945.130(Google Chrome 79.0.3945.130)
      @小千东 已在 v2.7.8 修复
      1. 小千东  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 79.0.3945.130(Google Chrome 79.0.3945.130)
        @神代綺凜 感谢
  4. Rorical  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 78.0.3904.87(Google Chrome 78.0.3904.87)
    不知道大佬用的什么接口,但是好像可以用IP访问到app-api.pixiv.net(目前210.140.131.223),所以能不能直接改DNS?
    目前我从https://tools.ipip.net/dns.php获取到真实IP
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 79.0.3945.117(Google Chrome 79.0.3945.117)
      @Rorical 可以,你可以直接用一个无污染的 DNS,或者改 hosts 210.140.131.223 app-api.pixiv.net

      现状是www.pixiv.net有污染和阻断,app-api.pixiv.net只有污染,i.pximg.net正常,pxder 只需要连接app-api.pixiv.neti.pximg.net,只要保证app-api.pixiv.net的 DNS 解析正常即可

  5. MoeFox  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 71.0.3578.98(Google Chrome 71.0.3578.98)
    你好大佬,我在国外为什么用户名跟密码是正确的却提示出Login fail! Please check your input or proxy setting.?
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 78.0.3904.108(Google Chrome 78.0.3904.108)
      @MoeFox 我刚试了登陆没有问题,用户名写邮箱
  6. ouroboros  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 78.0.3904.108(Google Chrome 78.0.3904.108)
    大佬,我今天下载的时候,几次都是给了我
    error: {
    user_message: '',
    message: 'Rate Limit',
    reason: '',
    user_message_details: {}
    怎么办?
    我uid只有957,不够5000
    1. brmkai  Windows 10 x64 Edition(Windows 10 x64 Edition) / Sogou Explorer(Sogou Explorer)
      @ouroboros 亲,这边建议你路由器贴脸,或者换家代理φ( ̄∇ ̄o)
      1. ouroboros  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 79.0.3945.88(Google Chrome 79.0.3945.88)
        @brmkai 我本人就在墙外,以前都可以下载但是就是从12开头到现在都没法用。
  7. AN  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 78.0.3904.108(Google Chrome 78.0.3904.108)
    你好,今日用pxder -F時出現以下,請問如何解決?謝謝

    Download Path: I:\PIXIV
    SyntaxError: C:\Users\1\AppData\Roaming\pxder\private.json: Unexpected end of JSON input
    at JSON.parse ()
    at Object.Module._extensions..json (internal/modules/cjs/loader.js:799:27)
    at Module.load (internal/modules/cjs/loader.js:641:32)
    at Function.Module._load (internal/modules/cjs/loader.js:556:12)
    at Module.require (internal/modules/cjs/loader.js:681:19)
    at require (internal/modules/cjs/helpers.js:16:16)
    at PixivFunc.downloadFollowAll (C:\Users\1\AppData\Roaming\npm\node_modules\pxder\src\index.js:307:20)
    at C:\Users\1\AppData\Roaming\npm\node_modules\pxder\bin\pxder:72:41
    at processTicksAndRejections (internal/process/task_queues.js:89:5)

    1. 神代綺凜  Mac OS X(Mac OS X) / Safari(Safari)
      @ANpxder --conf-loca得到数据目录,进去删掉private.json

      可能是程序之前在写缓存的时候出错了还是怎么导致 json 有问题,我回头加个错误处理

  8. LYM  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 78.0.3904.108(Google Chrome 78.0.3904.108)
    大佬想问下会出批量下载Pixivision专辑的功能咩
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 78.0.3904.108(Google Chrome 78.0.3904.108)
      @LYM 不会,实际上我自己现在下载需求都不大了,甚至想摸
      1. LYM  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 78.0.3904.108(Google Chrome 78.0.3904.108)
  9. fluquormyosotis  Android 9(Android 9) / Google Chrome 57.0.2987.108(Google Chrome 57.0.2987.108)
    我最近几天才知道pxder才开始用,遇到了许多因为不了解出现问题,所以一下子说了好多。
    然后我还有要说的,我用nobup也好,screen也罢都不能真正意义上挂后台,ssh软件关了就停止了,明明sslocal,webssh用nohup就能一直运行。pxder用同样方法还是不能保持运行(所以我想到的方法竟然是搭建webssh,再docker搭建个oldiy的谷歌浏览器运行webssh运行pxder,,,,)
    1. 神代綺凜  Mac OS X(Mac OS X) / Safari(Safari)
      @fluquormyosotis 请用nohup <command> &,单纯的 nohup 是没有用的,或者直接用 screen
  10. fluquormyosotis  Android 9(Android 9) / Google Chrome 57.0.2987.108(Google Chrome 57.0.2987.108)
    dalao能否支持pxder解析多线程,就是同时解析几个画师的作品列表,因为解析完作品列表才能开始下载,会产生下载的空闲,而且有时候出现一些小问题,暂时的连接出错,或者是最后一张图片下载完了留在tmp不能解析下一个作者就停下来了,,另外,这个博客写评论的特效有点意思|´・ω・)ノ
    1. 神代綺凜  Mac OS X(Mac OS X) / Safari(Safari)
      @fluquormyosotis 不会支持解析多线程,由于查重机制的限制,并发解析会带来一系列复杂的问题
  11. 半岁音书  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.120(Google Chrome 77.0.3865.120)
    我已经设置代理了但是还是登录失败[5] Proxy socks://127.0.0.1:1080小飞机也确定打开并打开了允许局域网连接还确定本地端口的确是1080而且密码和账号确定没有问题可是还是Login fail! Please check your input or proxy setting.
    1. 神代綺凜  Mac OS X(Mac OS X) / Safari(Safari)
      @半岁音书 这个问题已经在新版修复
      1. 穹妹  Windows 10 x64 Edition(Windows 10 x64 Edition) / Sogou Explorer(Sogou Explorer)
        @神代綺凜 =。=大佬我也是,我用的是SSTAP那个代理的,之前设置好了,可以用,两个星期前,现在也显示楼上那个问题了
  12. Suka  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.90(Google Chrome 77.0.3865.90)
    大佬,可以做到只更新最新的图吗?比如作者有1.2.3张图,1的是早起作品,我并不想收集,删除了1之后,下次下载还会把1下载,能否增加一个指令,只下载3之后的图,之后都接着上次下载(最新的图id >老的图,程序应该是可以判断的)
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.120(Google Chrome 77.0.3865.120)
      @Suka 当然是能的,但是这类设计始终无法照顾到所有人,例如下载中途中断了导致中间的某些图没下,如果按你说的逻辑就会直接跳过,这也许不是所有人都想要的结果,单独做开关又很麻烦

      目前的逻辑是当列表某一页的图全都下载了就认为已经找到了最后下载到的位置,不会再继续往后拉取
      特别地,当按关注画师更新的时候,如果某画师的最新三张图从旧到新连续存在至少一张,也不会继续爬取

      1. Suka  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.90(Google Chrome 77.0.3865.90)
        @神代綺凜 了解
  13. AN  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.90(Google Chrome 77.0.3865.90)
    你好,想問pxder -f是否才能測到2773個關注中的畫師?若要用pxder -f下載另外的畫師要怎做?謝謝
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.90(Google Chrome 77.0.3865.90)
      @AN -f参数会下载所有已公开关注的画师,上限是 5000,受官方 API 所限制
      下载其他画师可以用-u参数指定 uid,这些在说明中都有写
  14. Buan  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.75(Google Chrome 77.0.3865.75)
    dalao 为什么我在用pxder的时候只能一个一个画师手动下载 ,每次下载完一个画师的作品就得关掉酸酸乳再重开一遍,不然就会报错(一个一个画师手动下载实在是太痛苦了orz)。
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 76.0.3809.132(Google Chrome 76.0.3809.132)
      @Buan 近期可能**手段会比较多,如果出现卡住的情况可以右击酸酸乳-服务器-断开当前所有连接,pxder 将会自动重试
      1. Buan  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.90(Google Chrome 77.0.3865.90)
        @神代綺凜 dalao我按照你说的试了一下,酸酸乳断开所有连接后npm还是提示SocksClientError: Socket closed(就之前我发的那段代码)我还是过一阵子再试试吧
  15. Ouroboros  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 76.0.3809.132(Google Chrome 76.0.3809.132)
    大佬,有没办法把动画下载成webm,gif,之类的格式?
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 76.0.3809.132(Google Chrome 76.0.3809.132)
      @Ouroboros 之前试过转 gif 但不尽人意,webm 的话也只有 webkit 支持,目前没找到比较完美的方案
      我比较倾向于转 mp4
      https://github.com/Tsuk1ko/pxder/issues/13
      1. Ouroboros  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 76.0.3809.132(Google Chrome 76.0.3809.132)
        @神代綺凜 你会把转mp4放到gui版吗?
      2. Ouroboros  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 76.0.3809.132(Google Chrome 76.0.3809.132)
        @神代綺凜 你会把转mp4放到gui版吗?
  16. wzxyisme  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 76.0.3809.132(Google Chrome 76.0.3809.132)
    你好,我使用的是谷歌在台湾的centos服务器,为什么会登录不了
    1. wzxyisme  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 76.0.3809.132(Google Chrome 76.0.3809.132)
      @wzxyisme
      该评论仅登录用户及评论双方可见
  17. SL  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 76.0.3809.100(Google Chrome 76.0.3809.100)
    顺便想问一下大佬,收藏插画文件夹会因为图片太多而卡住的问题怎么解决|´・ω・)
    以及如果在收藏下载完前关闭,下次再执行pxder -b命令的话会接着上次的进程下载吗?
    1. 神代綺凜  Mac OS X 10.14.6(Mac OS X 10.14.6) / Google Chrome 76.0.3809.100(Google Chrome 76.0.3809.100)
      @SL 图片太多卡住具体是什么现象,process 不动了还是怎么

      收藏没有做记和缓存,不会接着下载,后续版本会加入缓存功能

      1. SL  Android 7.1.2(Android 7.1.2) / Firefox 68.0(Firefox 68.0)
        @神代綺凜 卡住是说因为收藏的插画都下在同一个文件夹里所以打开时会有资源管理器卡住的问题,想知道能不能按照所在页数或者其他标准给它们分成数个文件夹
        辛苦大佬了~
        1. 神代綺凜  Mac OS X 10.14.6(Mac OS X 10.14.6) / Google Chrome 76.0.3809.100(Google Chrome 76.0.3809.100)
          @SL 下个版本改成按画师分文件夹吧
          1. SL  Android 7.1.2(Android 7.1.2) / Firefox 68.0(Firefox 68.0)
            @神代綺凜 好der,大佬辛苦了~
  18. SL  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 76.0.3809.100(Google Chrome 76.0.3809.100)
    感谢分享,终于发现一个可以批量下载收藏的了OuO
  19. flyco  Windows 10 x64 Edition(Windows 10 x64 Edition) / Firefox 53.0(Firefox 53.0)
    感谢您的分享,希望增加一个实用的选项:不再更新比现有图片更旧的图片,或者只更新最近1年内的作品(有一些画师放了大量很旧的图,不合意删除掉,但是用update命令会再下载回来)
    1. 神代綺凜  Mac OS X 10.14.6(Mac OS X 10.14.6) / Google Chrome 76.0.3809.100(Google Chrome 76.0.3809.100)
      @flyco 感谢提议,这个功能会被加到将来的 GUI 版中
  20. lym  Windows 10 x64 Edition(Windows 10 x64 Edition) / Firefox 68.0(Firefox 68.0)
    膜拜~