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中使用monk访问mongodb
Jul 06 NodeJs
使用nodejs、Python写的一个简易HTTP静态文件服务器
Jul 18 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
使用nodejs下载风景壁纸
Feb 05 NodeJs
用Nodejs搭建服务器访问html、css、JS等静态资源文件
Apr 28 NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 NodeJs
nodejs结合Socket.IO实现的即时通讯功能详解
Jan 12 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
详解Nodejs mongoose
Jun 10 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
nodejs基础之常用工具模块util用法分析
Dec 26 NodeJs
nodejs中request库使用HTTPS代理的方法
Apr 30 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
xajax写的留言本
2006/11/25 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
pygame实现弹力球及其变速效果
2017/07/03 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
中医药大学毕业生自荐信
2013/11/08 职场文书
行政办公员自我评价分享
2013/12/14 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
广告公司文案策划岗位职责
2015/04/14 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android