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 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
Nodejs为什么选择javascript为载体语言
Jan 13 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
详解HTTPS 的原理和 NodeJS 的实现
Jul 04 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
NodeJS加密解密及node-rsa加密解密用法详解
Oct 12 NodeJs
浅谈vue websocket nodeJS 进行实时通信踩到的坑
Sep 22 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 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利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
使用vue2实现购物车和地址选配功能
2018/03/29 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
详解Python中类的定义与使用
2017/04/11 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
优秀党支部事迹材料
2014/01/14 职场文书
大学生开西餐厅创业计划书
2014/02/01 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
小学音乐课教学反思
2016/02/18 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
使用 Apache 反向代理的设置技巧
2022/01/18 Servers