因为花瓣要关闭了,同事在花瓣采集的1w6个图片无法被在线访问了,需要进行保存。
在个人主页单个采集(不是画板)进行浏览,可以抓取到形如
http://login.meiwu.co/hxkkqippkx/pins/?jr91h12a&max=2239464418&limit=20&wfl=1
的Ajax请求。
其中max
为上一次请求结果中最后一张采集图片的pin_id
。表现逻辑为将采集集合中大于该max
的数据,取limit
条返回,当然limit
可以调整成100
。
请求本身中携带cookie
等必要因素,可以自行摘取。这里有个请求的例子。
这里有个请求结果的例子。
每个花瓣的结构中有如下必要字段
{
"pin_id": 33579511,
"user_id": "tongshi_id",
"board_id": 3455962,
"file_id": 7094309,
"file": {
"farm": "farm1",
"bucket": "hbimg",
"key": "dee9c9f1f9cf144fa103bd3120ca99677e116a4532b41-xGFBEv",
"type": "image/jpeg",
"width": 740,
"height": 340,
"frames": 1
},
"media_type": 2,
"source": "fun.alipay.com",
"link": "http://fun.alipay.com/zhthd/index.htm?src=wdzfb_bottom02",
"raw_text": "好粉, 好多字,好多元素. 账户通为你的异地恋情护航 - 支付宝 知托付!",
}
其中 pin_id
有助于下一期请求。file
中的key
有助于获得图片最后的地址。
于是很明显的就只有两步要做:
很幸运的是,所有的图片都在花瓣的cdn存放,地址形如
http://img.hb.meiwu.co/${hash}
hash
部分会在第一步的结果找到。
如把上面的key
拼到这个地址后面部分,可以得到地址:http://img.hb.meiwu.co/dee9c9f1f9cf144fa103bd3120ca99677e116a4532b41-xGFBEv
,也就是下面的图
于是乎,就可以批量下载了。
下载采用了aria2c。
花瓣CDN对IP有限制,大约500张的频繁请求之后就被限制,于是做了一下延时处理。俗称IP冷却。
具体做法为:
-
将
worker
中的文件全部移动到done
文件夹,进行清空。 -
将采集到的收藏结果集
source
文件夹中取4个JSON文件放到worker
文件夹 -
下载脚本读取
worker
文件夹中的文件,进行下载,存储到output
文件夹。 -
下载完成后,结束进程。
为了自动化执行这个循环,就有了这个脚本。它监听到nohup
包裹的进程的结束后,再次启动nohup
,来重复这个过程。
当然还有更好的做法,限于时间,就不做尝试了。
Please feel free to contact me if you have any problems 😄
npm run cwa
lib/logger.js is copied from node-logger, all rights reserved to quirkey.