A Node.js crawler
# install dependencies
npm install
# serve run
node index.js
学习NodeJS的第一站,第一次自己尝试写个爬虫,说实话,自己都嫌弃写的垃圾,后续应该还会慢慢重写吧,也希望dalao们不要笑话啦。
前几天自己随便刷网站,偶遇了这个一大堆妹纸图片的网站 http://www.mzitu.com/ 不讨论图片的质量),看了一下网站结构,发现还是挺简单的,就萌发了自己爬一下图片的念头。
开始动手,翻了一些前辈们的博客和GitHub,就有了以上的代码,当然,以上的代码并不是第一个版本。
思路:
- 先爬个100页的相册的链接,结构很简单,从http://www.mzitu.com/page/1 到http://www.mzitu.com/page/100
- 拿到每一页里面所有相册的链接,存下来
- 拿到所有相册的链接后发起get请求,拿到相册里包含的照片的数目和相册里面照片的链接,再次请求这些链接,把图片下载下来写到文件夹。
思路有了,简单粗暴开始搞,起初的时候并没有考虑的异步问题,直接写了三个函数,想着一个个地跑,然后很显然,输出的结果全部为空,才想起来回调函数全部都是异步地调用的。很好,有办法了,嵌套调用,嵌套了两层闭包,三层回调, 大家不要这么干,写出来的代码我自己都不知道是个啥,当然,跑起来了,先测试了一下3页图片,恩,问题不大,全下载下来了,十分激动,直接100页走起。。然后。。又挂了,下载下来的图片要么是无效图片,要么就是自带马赛克。思考了一下,会不会是并发的锅?
内心OS:说好的高并发友好呢。。。。。。
于是想到了async,来处理一下并发吧,限制并发,把嵌套重写一下,于是就有了以上的代码,算了,先让它跑起来吧。。于是。。跑起来了。。
第一个版本,待我后续重写,大佬们求指点。