pixiv网页版(pixiv网页版游览)

NodeJS扒Pixiv咱P站的个人收藏夹经历着重说明,非墙内向,体验代码时务必保证科学上网环境。Pixiv场景咱大P站,绅士聚集地……你好我好大家好,身体越来越不好。我这边需要把自己多年收藏的图集整

NodeJS扒Pixiv咱P站的个人收藏夹经历

着重说明,非墙内向,体验代码时务必保证科学上网环境。

pixiv网页版(pixiv网页版游览)

Pixiv

场景

咱大P站,绅士聚集地……你好我好大家好,身体越来越不好。

我这边需要把自己多年收藏的图集整理出来,然后永久保存在移动“硬”盘里,不多,就1000多张。但是,一张一张的点击,放大,再右键,实在是麻烦。所以便闲着花一小时写了个脚本,爬一下。

其实就是我会员到期了……

说明

爬P站收藏夹算是我这段时间爬的最简单的数据了……讲真,不知道是P站不怕你爬还是技术团队忽视这一块,实在是简单的头大。以上不考虑登录过程。

P站收藏夹保存本地常规方式

显示收藏夹看目标作品(接一下TID大佬的Niya一用):

pixiv网页版(pixiv网页版游览)

目标作品

进击进入目标作品:

pixiv网页版(pixiv网页版游览)

目标作品页

点击图片放大看原图:

pixiv网页版(pixiv网页版游览)

大图

然后右键:

pixiv网页版(pixiv网页版游览)

右键

到这里,大家应该问题都不大。因为我们都是这么干的嘛……

爬取思路查询相关接口拿到cookie(不搞登录了)关键referer

对,这三个就够了,没有淘宝那些坑爹的验证与算法。当然,你用Cookie去啃淘宝也不会太麻烦。

查询相关接口

这个很简单,因为P站是PHP的SSR,直接请求页面即可。

页面为:https://www.pixiv.net/bookmark.php?rest=show&p=1

p=这个参数直接点击进来是没有的,但是后面翻页会带上,所以我们默认就写上即可。

那么很简单,这里的p相关的数字一定得有个字段记录下,那么我们就弄个page吧:

let page = 1\\n

然后就是请求这个页面了,再分析页面的各种标签了,我们当然借用superagent与cheerio了。superagent就不多说了,请求神器。cheerio可以理解就是服务端用的jQuery,老朋友了。

还有少不了的写文件与配置文件,写文件自然是fs,配置文件自己来,我喜欢如下:

pixiv网页版(pixiv网页版游览)

配置文件

啥,Cookie和referer哪里来?看这:

pixiv网页版(pixiv网页版游览)

获取点

pixiv网页版(pixiv网页版游览)

cookie

pixiv网页版(pixiv网页版游览)

referer

然后我们习惯性的记得,页面内容数量有上限的情况下,弄个参数记录当前索引。因为P站的收藏夹一个页面有20个图片,所以我们要记录下来,但是事实上,为了安全起见,这个最大数量最好是抓到数据后拿长度,这里先这么写,大家知道有这个东西即可。

let page = 1\\n , pageCurrentLength = 0\\n , pageMaxLength = 1\\n

分别是:页码、当前页内的图片数量、当前页面最大数量。

那么加上引用包,我们的准备工作就就绪了,引入如下:

const config = require(\\\’./config/index\\\’)\\nconst request = require(\\\’superagent\\\’)\\nconst fs = require(\\\’fs\\\’)\\nconst cheerio = require(\\\’cheerio\\\’)\\n

分别是:配置文件、superagent、fs、cheerio。

对了,记得npm install superagent cheerio啊。

开爬收藏页

pixiv网页版(pixiv网页版游览)

找图片

通过调试器,我们很容易就找到图片对应的链接地址。这里随手搜索下相应class,发现刚好是20个,那么就可以简单的class来selector即可获取所有图片模块了。

之前都说了,cheerio就是服务端的jQuery,所以很容易就拿到,代码如下:

let thumbnails = $(\\\’._layout-thumbnail>img\\\’)\\n , titles = $(\\\’a>h1.title\\\’)\\n

恩,因为我们要命名图片,所以顺手把下面的title一起扣下来了,查找方式跟上面查图片木块一样一样的。

注意,这里与常规想法不同,P站简单的另一个原因。

我这里有留意看了下P站放大图片与这里缩略图的关系,然后发现,还真有关系。也因此,我节省了大批代码,不用去爬二级页面了。具体关系如下:

缩略图:https://i.pximg.net/c/150×150/img-master/img/2014/11/11/00/09/34/47020705_p0_master1200.jpg

放大图:https://i.pximg.net/img-original/img/2014/11/11/00/09/34/47020705_p0.png

相关关键词:

/c/150×150/img-master,_master1200,/img-original。

简单来说,/c/150×150/img-master换成/img-original,_master1200拿掉,就是放大图了。呼~这样就简单多了(这里有个坑,放大图后缀未必与这里一样,但是就png与jpg两种,后面有个函数专门干这个事情)。

正则搞起来:

originImgUrl = imgUrl.replace(/\\\\/c\\\\/150×150\\\\/img-master(.*?)_master1200/, \\\’/img-original$1\\\’)\\n

imgUrl就是原来的缩略图,而originImgUrl就是我们的放大原图了,还是比较简单了嘛。

到这里(省略了常规性步骤),我们已经从收藏页获取了最多20个的图片模块,然后图片模块拿到了title以及通过正则匹配规则获取了原图路径,所以下面我们就是把图片弄下来,保存本地了。

是时候来fs了。

保存本地

核心代码:

let stream = fs.createWriteStream(`./pixiv/imgs/${imgName.replace(/\\\\//g, \\\’\\\’)}`)\\n , req = request.get(originImgUrl)\\n .set(\\\’cookie\\\’, config.cookie)\\n .set(\\\’referer\\\’, config.referer)\\nreq.pipe(stream)\\nreq.on(\\\’end\\\’, () => {\\n if(++pageCurrentLength >= pageMaxLength) restart(++page)\\n})\\n

一个pipe的事情。

关于pipe,这里不多说,有兴趣的看下Node官方,如果只是看本文主题,复制这一坨代码即可。

过程嘛,就是请求的文件按照流Stream模式写入文件,避免大文件卡内存问题。

注意点是最后那个on end,每个文件写完后我们要确定收到,然后把文件数加一,直到文件写入达到页面所有数目,进行++page翻页。至于restart函数,明显就是启动函数了,这里调用启动函数一下。具体文末的代码会有总结,源码也有。

这里梳理一下先

我们干了这么几件事。

收集整理cookie与referer来解决正常访问问题。抓取php页面,然后分析功能模块。找到缩略图与原图的规律,然后直接拿到原图的链接。请求链接,看下是否有这个图片,如果没有就换一下后缀。下载保存原图。

第一个是手动的,所以代码里面只是粘贴过来,我们不做业务处理。

第二与第三个合并一起,可以看做是功能模块,所以我们独立一个函数。

第四个,当做检测函数。

最后一个,独立一个函数。

于是我们有了三个函数,解决上述问题。

核心模块函数

restart,就是启动函数,启动干嘛,自然是访问网页然后分析相关模块。

checkLinkStatus,检查图片类型状态,确定图片正确链接,我们只要head即可,所以使用了HEAD,而不是GET。

downloadFile,下载文件啦。

其中,需要传参如下:

checkLinkStatus({ imgTitle, imgName, originImgUrl }, index)

downloadFile({imgName, originImgUrl })

这里有优化点,不过我不打算弄了……等猴年马月维护吧。

checkLinkStatus使用的是HEAD,因为有没有这个文件,HEAD获取的报文头就已经知道了,没必要获取http请求的报文体了,也是为了加速。

至此,我们主逻辑全部完成,下面就是核心源码了。

核心源码

头条排版坑爹,先图片再代码(辣眼睛):

pixiv网页版(pixiv网页版游览)

top

pixiv网页版(pixiv网页版游览)

middle

pixiv网页版(pixiv网页版游览)

bottom

排版无敌的代码来了,下面有源码……

const config = require(\\\’./config/index\\\’)\\nconst request = require(\\\’superagent\\\’)\\nconst fs = require(\\\’fs\\\’)\\nconst cheerio = require(\\\’cheerio\\\’)\\n// start page\\nlet page = 1\\n , pageCurrentLength = 0\\n , pageMaxLength = 1\\nfunction restart() {\\n pageCurrentLength = 0\\n // debugger\\n // if(page > 2) return\\n request\\n .get(`https://www.pixiv.net/bookmark.php?rest=show&p=${page}`)\\n .set(\\\’cookie\\\’, config.cookie)\\n .set(\\\’referer\\\’, config.referer)\\n .end((err, res) => {\\n if(err) {\\n console.log(err)\\n }\\n const result = res.text\\n $ = cheerio.load(result)\\n let thumbnails = $(\\\’._layout-thumbnail>img\\\’)\\n , titles = $(\\\’a>h1.title\\\’)\\n // max length base on thumbnails length\\n pageMaxLength = thumbnails.length\\n Array.from(thumbnails).forEach(async (thumbnail, index) => {\\n // debugger\\n // if(index) return\\n let imgUrl = thumbnail.attribs[\\\’data-src\\\’]\\n , imgFix = imgUrl.match(/\\\\.\\\\w+$/)[0]\\n , imgTitle = titles[index].attribs.title\\n , imgName = imgTitle + imgFix\\n // normal rule with scale img and origin img.\\n , originImgUrl = imgUrl.replace(/\\\\/c\\\\/150×150\\\\/img-master(.*?)_master1200/, \\\’/img-original$1\\\’)\\n checkLinkStatus({ imgTitle, imgName, originImgUrl }, index)\\n })\\n })\\n}\\nfunction checkLinkStatus({ imgTitle, imgName, originImgUrl }, index) {\\n request.head(originImgUrl)\\n .set(\\\’cookie\\\’, config.cookie)\\n .set(\\\’referer\\\’, config.referer)\\n .end((err, res) => {\\n // img\\\’s suffix maybe wrong. then should change to another one.(png and jpg)\\n if(err) {\\n let originImgUrlFix = originImgUrl.match(/\\\\.\\\\w+$/)[0]\\n , png = \\\’.png\\\’\\n , jpg = \\\’.jpg\\\’\\n if(originImgUrlFix === png) {\\n imgName = imgTitle + jpg\\n originImgUrl = originImgUrl.replace(/\\\\.\\\\w+$/, jpg)\\n }\\n else {\\n imgName = imgTitle + png\\n originImgUrl = originImgUrl.replace(/\\\\.\\\\w+$/, png)\\n }\\n }\\n setTimeout(downloadFile.bind(null, { imgTitle, imgName, originImgUrl }), config.timeout * index);\\n })\\n}\\nfunction downloadFile({ imgTitle, imgName, originImgUrl }) {\\n // ignore \\\’/\\\’ error\\n let stream = fs.createWriteStream(`./pixiv_col/imgs/${imgName.replace(/\\\\//g, \\\’\\\’)}`)\\n , req = request.get(originImgUrl)\\n .set(\\\’cookie\\\’, config.cookie)\\n .set(\\\’referer\\\’, config.referer)\\n req.pipe(stream)\\n req.on(\\\’end\\\’, () => {\\n if(++pageCurrentLength >= pageMaxLength) restart(++page)\\n })\\n}\\nrestart()\\n

上面都已经说明了,这里就不再带上过多注释了,没错,就是懒……

至于config,两种方案,一来看上面截图自己写一个,二来GitHub源码拉下来,自己改一下。

源码

GitHub:https://github.com/ZweiZhao/Spider

如需要,建议使用dev分支,代码最新。

拉取后,cd Spider然后npm i,最后npm run pc即可运行。

不要忘了,运行前去弄一下Cookie!!!

不要忘了,运行前去弄一下Cookie!!!

不要忘了,运行前去弄一下Cookie!!!

效果

pixiv网页版(pixiv网页版游览)

效果

兄弟们,我先去伤身体了。

后浪们,你要网站不要?这几个画师常去的网站不收藏一下嘛

推荐几个插画师常去的网站,供小伙伴们参考围观。各位有推荐的网站,可以留言哦!国内的微博、LOFTER、豆瓣、需要翻墙的FB、INS就不多说啦。个人体验是,微博偏向于作品展示和个人生活,LOFTER和豆瓣作品展示比较多;INS上经常能遇见大师,FB上除了作品之外,有更多的心得分享和视频。

Behance

pixiv网页版(pixiv网页版游览)

网址:https://www.behance.net/

设计社区,被Adobe以1.5亿美元收购。一个没有产品经理,产品完全由设计师设计的网站。个人非常喜欢,Behance上常驻的有设计师、插画师、品牌工作室,除了插画作品之外,还有许多设计作品,非常有意思。

pixiv

pixiv网页版(pixiv网页版游览)

网址:http://www.pixiv.net/

俗称p站,霓虹国出产,二次元聚集地,也有许多中国画手进驻。p站有漫画、小说和插画,最热的是插画部分,也有自己的聊天室和博客。在p上刷图很开心,大部分作者会上传分辨率很高的大图。但是要精准的找到一位画师,目前过滤功能是需要付费的…

涂鸦王国

pixiv网页版(pixiv网页版游览)

网址:http://www.poocg.com/works/new

老牌专业插画网站,好多年了,许多知名插画师都在这里,新手一样可以来展示你的作品。

pinterest

pixiv网页版(pixiv网页版游览)

网址:https://www.pinterest.com/

花瓣网的原型…pinterest资源很多,你能搜到许多外国设计师、插画师的作品,然后跟到他的个人官网上去。

Esty

pixiv网页版(pixiv网页版游览)

网址:https://www.etsy.com/

一个购物网站,主要销售的是手工艺品,类似淘宝,豆瓣东西板块有点这个味道,但esty更专业和集中。在这里你能买到插画师的各种作品,非常有趣,一个变现的好地方。

站酷

pixiv网页版(pixiv网页版游览)

http://www.zcool.com.cn/

不得不提的站酷,设计师和插画师云集,互动很棒,很开放。在站酷,你可以在文章板块找到前辈们的经验谈,作品区涵盖面很广,也有插画师分享的过程图,总之,就是棒棒哒!很久之前曾在站酷上看过Parco写的“聊聊非科班怎么入行”,虽然不是设计师,但是很受触动,推荐大家围观~

视觉中国设计师区

pixiv网页版(pixiv网页版游览)

http://www.shijue.me/

视觉中国,主页君个人很喜欢的网站之一。专业的设计师/插画师平台,并且引入了各项大赛。视觉中国还收购了全球第二大高端视觉内容版权服务供应商Corbis Images的全部资产,目测还有大轮扩张。

WEBTOON

pixiv网页版(pixiv网页版游览)

http://www.webtoons.com/zh-hans/top

被无限挑战安利的…这是一个韩国的漫画网,怎么说呢,画风,真的很有个人风格。有中文版(这里面的驻站作家,在国内大家应该最熟悉赵石了吧?)结果安利完我也没有找到无敌pink…

BauBauHaus

pixiv网页版(pixiv网页版游览)

http://www.baubauhaus.com/

综合了插画、摄影、时尚以及艺术相关作品的综合照片流式网站。打开速度很慢…

grafolio

pixiv网页版(pixiv网页版游览)

http://www.grafolio.com/main.grfl

韩国的插画师网站,奈何打开速度真的很慢…+1

———————————————-下面是很赞的插画师个人网站推荐——————————————–

sakiroo

pixiv网页版(pixiv网页版游览)

http://sakiroo.com/

韩国网站,插画师sakiroo(据说中午名是崔相贤?)的站点,高产,而且插画人设特别有意思。

n8w

pixiv网页版(pixiv网页版游览)

http://www.n8w.com/

n8w,Nate Williams的个人网站,他是一位插画师,同时也是一名导演,在他的个站你可以看到许多插画衍生的周边产品。如果你想做发展自己的IP,不妨看看Nate Williams的个站。

既然说到了插画师,下回来聊聊插画师的个站吧~以及,再次呼吁市场尊重原创,以及,画师们,注意保护好自己的版权呀!

CARGO

pixiv网页版(pixiv网页版游览)

网址:http://cargocollective.com/

一个个人发布平台,帮助作者提高曝光度。有许多设计作品、摄影和插画作品。

illustrationage

pixiv网页版(pixiv网页版游览)

地址:https://illustrationage.com/

功能性网站,提供插画展示、在线教程(付费课程但并不贵)、图书售卖等一系列的功能,以及有许多作者官网及通信地址。超级nice~

directory of illustration

pixiv网页版(pixiv网页版游览)

pixiv网页版(pixiv网页版游览)

地址:http://www.directoryofillustration.com/

正如网站的名字,插画目录,在照片流之外,目录页中按插画师姓氏收录着作品。

CIA BLOG

pixiv网页版(pixiv网页版游览)

地址:http://www.centralillustration.com/blog/

一个聚集着很多知名插画师的博客,能够给你带来许多灵感。

ELECTROCOMICS

pixiv网页版(pixiv网页版游览)

地址:http://electrocomics.com/english/strips_engl.htm

一个欧洲漫画分享网站,很有意思,前提是,你要会一些英语(不,应该说要还不错才行)

CHRIS SILAS NEAL

pixiv网页版(pixiv网页版游览)

地址:http://csneal.com/

插画师CHRIS SILAS NEAL的个人网站,很棒,官网上还有他的视频~(就是打开的网速非常慢)

CHRIS SILAS NEAL

pixiv网页版(pixiv网页版游览)

地址:http://www.book-by-its-cover.com/

关于艺术家的笔记,同上条,你要会一些英语(不,应该说要还不错才行)

PAPERCRAVE

pixiv网页版(pixiv网页版游览)

地址:http://papercrave.com/

个人很喜欢,是一个关于纸艺的网站。一个字,美!

大家如果有对板绘学习的疑问,想要了解的作品,或者有原创的作品想分享,欢迎评论或者私信联系哟~

(注:文章图片均来自网络,侵删)

关于P站作品id的使用方法与进入方法

P站怎么进?

10月18之前除移动网以外是可以正常访问的,国区dns污染之后对于电脑网页端只需要更改本地hosts文件

找到hosts,改为txt文件用记事本打开hosts,在最下面复制下面两行保存,再删掉.txt就行了。

210.129.120.41 www.pixiv.net accounts.pixiv.net

210.140.131.144 source.pixiv.net imgaz.pixiv.net

pixiv网页版(pixiv网页版游览)

pixiv网页版(pixiv网页版游览)

手机app或者网页端

可以通过root来更改hosts文件访问

更简单的方式: 用app,更换ip地址正常访问P站客户端

只需要下载一个能够更改dns的APP输入可以正常访问的地址就可以了。

神秘代码:1dFpPDqp grxr

superdns签到七天能用vip专线

puredns正常使用

作品id怎么用?

pixiv网页版(pixiv网页版游览)

每一张作品都有一张作品数字id,拥有作品id之后

在=符号后面加上或更改数字作品id就能找到原图,点击图片放大到原始分辨率,就可以保存到原画。

https://www.pixiv.net/member_illust.php?mode=medium&illust_id=66032301

pixiv网页版(pixiv网页版游览)

每个画师也都有自己的id,可以去关注

https://www.pixiv.net/member.php?id=1432050

同样是在=符号后面加上或更改数字id

注意画师id与作品id网址是不一样的,不能通用。

手机客户端上的P站官方APP是不能使用id搜索作品或画师的

推荐大家去下载第三方的P站客户端,一个新世界的大门哦。

pixiv网页版(pixiv网页版游览)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
晓虹晓虹认证作者
上一篇 2023年9月19日 15:15
下一篇 2023年9月19日 15:21

相关文章

发表回复

登录后才能评论

客服QQ: 8838832

客服微信