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 后缀名判断限制代码
Mar 31 NodeJs
NodeJS学习笔记之网络编程
Aug 03 NodeJs
NodeJS制作爬虫全过程(续)
Dec 22 NodeJs
NodeJS学习笔记之Connect中间件模块(二)
Jan 27 NodeJs
Nodejs中的this详解
Mar 26 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
NodeJs的fs读写删除移动监听
Apr 28 NodeJs
nodejs构建本地web测试服务器 如何解决访问静态资源问题
Jul 14 NodeJs
nodejs acl的用户权限管理详解
Mar 14 NodeJs
nodejs中函数的调用实例详解
Oct 31 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
NodeJs 模仿SIP话机注册的方法
Jun 21 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实现转盘抽奖算法分享
2020/04/15 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
JavaScript实现打字游戏
2021/02/19 Javascript
Python编程中对文件和存储器的读写示例
2016/01/25 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
棉花姑娘教学反思
2014/02/15 职场文书
财产保全担保书范文
2014/04/01 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
迎国庆横幅标语
2014/10/08 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
毕业论文致谢范文
2015/05/14 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
判断Python中的Nonetype类型
2021/05/25 Python
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android