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的子进程(child_process)调用系统命令的方法分享
Jun 05 NodeJs
用nodejs实现PHP的print_r函数代码
Mar 14 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
Nodejs读取文件时相对路径的正确写法(使用fs模块)
Apr 27 NodeJs
使用vs code开发Nodejs程序的使用方法
Sep 21 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
NodeJs之word文件生成与解析的实现代码
Apr 01 NodeJs
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
May 30 NodeJs
nodejs二进制与Buffer的介绍与使用
Jul 11 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
用session做客户验证时的注意事项
2006/10/09 PHP
使用PHP 5.0创建图形的巧妙方法
2010/10/12 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
Angular实现响应式表单
2017/08/04 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
vuex 的简单使用
2018/03/22 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
烹调加工管理制度
2014/02/04 职场文书
领导班子四风表现材料
2014/08/23 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
慰问信格式
2015/02/14 职场文书
煤矿安全保证书
2015/02/27 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL
TS 类型兼容教程示例详解
2022/09/23 Javascript