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写的一个简单项目打包工具
May 11 NodeJs
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
Aug 03 NodeJs
详谈nodejs异步编程
Dec 04 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
详解从NodeJS搭建中间层再谈前后端分离
Nov 13 NodeJs
Nodejs封装类似express框架的路由实例详解
Jan 05 NodeJs
NodeJS和浏览器中this关键字的不同之处
Mar 03 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
c#中的实现php中的preg_replace
2009/12/21 PHP
php debug 安装技巧
2011/04/30 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
javascript FormatNumber函数实现方法
2008/12/30 Javascript
小议javascript 设计模式 推荐
2009/10/28 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
js a标签点击事件
2017/03/30 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
2018/04/03 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
Tensorflow 实现释放内存
2020/02/03 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
html5绘制时钟动画
2014/12/15 HTML / CSS
祖国在我心中演讲稿200字
2014/08/28 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
写给领导的感谢信
2015/01/22 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书