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实现阿里大鱼短信通知发送
Jan 17 NodeJs
nodejs入门教程四:URL相关模块用法分析
Apr 24 NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
nodejs超出最大的调用栈错误问题
Dec 27 NodeJs
nodejs操作mongodb的填删改查模块的制作及引入实例
Jan 02 NodeJs
Mac下通过brew安装指定版本的nodejs教程
May 17 NodeJs
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
Dec 06 NodeJs
Nodejs中怎么实现函数的串行执行
Mar 02 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
nodejs nedb 封装库与使用方法示例
Feb 06 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(2)
2006/10/09 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
php强制下载类型的实现代码
2011/04/21 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
javascript 验证日期的函数
2010/03/18 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
python类继承用法实例分析
2015/05/27 Python
python3中int(整型)的使用教程
2017/03/23 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
python带参数打包exe及调用方式
2019/12/21 Python
Python 远程开关机的方法
2020/11/18 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
写给女朋友的道歉信
2014/01/12 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
元旦主持词开场白
2015/05/29 职场文书
风之谷观后感
2015/06/11 职场文书
开学随笔
2015/08/15 职场文书
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏
Golang 结构体数据集合
2022/04/22 Golang