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的10个性能优化技巧
Jul 15 NodeJs
NodeJS使用jQuery选择器操作DOM
Feb 13 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
NodeJs中express框架的send()方法简介
Jun 20 NodeJs
NodeJS收发GET和POST请求的示例代码
Aug 25 NodeJs
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
Sep 29 NodeJs
Nodejs中crypto模块的安全知识讲解
Jan 03 NodeJs
详解nodejs 配置文件处理方案
Jan 02 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 NodeJs
NodeJS http模块用法示例【创建web服务器/客户端】
Nov 05 NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 NodeJs
Nodejs 微信小程序消息推送的实现
Jan 20 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
Zend Guard使用指南及问题处理
2015/01/07 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
Mootools 1.2教程 事件处理
2009/09/15 Javascript
Jquery cookie操作代码
2010/03/14 Javascript
js如何获取object类型里的键值
2014/02/18 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
Python中转换角度为弧度的radians()方法
2015/05/18 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
python 实现简易的记事本
2020/11/30 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
雅虎笔试题(字符串操作)
2015/03/24 面试题
4s店机修工岗位职责
2013/12/20 职场文书
说明书怎么写
2014/05/06 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
西安大雁塔导游词
2015/02/10 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
学校教师培训工作总结
2015/10/14 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
我的收音机情缘
2022/04/05 无线电