Nodejs实现批量下载妹纸图


Posted in NodeJs onMay 28, 2015

听说最近下载妹子图很火?

Nodejs (javascrpt)自然不能落后~

虽然从没写过像样的Nodejs程序,但作为至少翻过书的前端同学来说,Nodejs用得还蛮顺手的哈~
花了一点事件学习了下Nodejs的网页获取和文件下载方法,没事乱捣腾就写了这个半成品的下载器

使用方法:

1)新建一个download目录
2)新建download.js(其实名字随便取),并复制到download目录下
3)复制两段代码到download.js中
4)打开命令行工具,并将当前目录转到与download目录下
5)在命令行中输入:node download.js
6)等着收妹子图吧~

简单的妹子图对象(新增断定下载支持)

var http = require('http');
var fs = require('fs');
 
function Mzitu(options) {
  this.id = 1;
   
  this.initialize.call(this, options);
  return this;
}
 
Mzitu.prototype = {
  constructor: Mzitu,
  initialize: function _initialize(options) {
    this.baseUrl = options.baseUrl;
    this.dir = options.dir || '';
    this.reg = options.reg;
    this.total = options.total;
    this.page = options.from || 1;
  },
  start: function _start() {
    this.getPage();
  },
  getPage: function _getPage() {
    var self = this,
      data = null;
 
    if (this.page <= this.total) {
      http.get(this.baseUrl + this.page, function (res) {
        res.setEncoding("utf8");
 
        res.on('data', function (chunk) {
          data += chunk;
        }).on('end', function () {
          self.parseData(data);
        });
      });
    }
  },
  parseData: function _parseData(data) {
    var res = [],
      match;
 
    while ((match = this.reg.exec(data)) != null) {
      res.push(match[1]);
    }
 
    this.download(res);
  },
  download: function _download(resource) {
    var self = this,
      currentPage = self.page;
 
    resource.forEach(function (src, idx) {
      var filename = src.substring(src.lastIndexOf('/') + 1),
        writestream = fs.createWriteStream(self.dir + filename);
       
      http.get(src, function (res) {
        res.pipe(writestream);
      });
 
      writestream.on('finish', function () {
        console.log('page: ' + currentPage + ' id: ' + self.id++ + ' download: ' + filename);
      });
    });
     
    self.page++;
    self.getPage();
  }
};

妹子图下载启动方式

var mzitu = new Mzitu({
  baseUrl: 'http://www.mzitu.com/share/comment-page-',
  dir: '',
  reg: /<img\s*src="(.*?)"\s*alt=".*"\s*\/>/g,
  total: 141,
  from: 1
});
 
mzitu.start();

以上所述就是本文的全部内容了,希望大家能够喜欢。

NodeJs 相关文章推荐
nodejs分页类代码分享
Jun 17 NodeJs
Nodejs关于gzip/deflate压缩详解
Mar 04 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 NodeJs
NodeJS实现自定义流的方法
Aug 01 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 NodeJs
ubuntu下安装nodejs以及升级的办法
May 08 #NodeJs
浅谈NodeJS中require路径问题
May 07 #NodeJs
NodeJs中的VM模块详解
May 06 #NodeJs
nodejs简单实现中英文翻译
May 04 #NodeJs
nodejs调用cmd命令实现复制目录
May 04 #NodeJs
nodejs通过phantomjs实现下载网页
May 04 #NodeJs
nodejs实现HTTPS发起POST请求
Apr 23 #NodeJs
You might like
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
javascript定时变换图片实例代码
2013/03/17 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
JS实现简单tab选项卡切换
2019/10/25 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
Python编写屏幕截图程序方法
2015/02/18 Python
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
Django框架 querySet功能解析
2019/09/04 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
小学生新学期寄语
2014/01/19 职场文书
社区七一党员活动方案
2014/01/25 职场文书
优秀班组长事迹
2014/05/31 职场文书
医学生求职信
2014/07/01 职场文书
培训计划通知
2015/07/15 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
Python音乐爬虫完美绕过反爬
2021/08/30 Python