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开发微信公众号后台服务实例
Sep 03 NodeJs
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
NodeJS使用七牛云存储上传文件的方法
Jul 24 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
NodeJS 实现多语言的示例代码
Sep 11 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
nodejs微信开发之授权登录+获取用户信息
Mar 17 NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 NodeJs
在NodeJs中使用node-schedule增加定时器任务的方法
Jun 08 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生成静态html文件的三种方法
2013/06/18 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
php rsa加密解密使用详解
2015/01/14 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
python简单读取大文件的方法
2016/07/01 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
python 去除二维数组/二维列表中的重复行方法
2019/01/23 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
2014年五一促销活动方案
2014/03/09 职场文书
如何写自我鉴定
2014/03/19 职场文书
毕业生工作求职信
2014/06/30 职场文书
单位政审意见范文
2015/06/04 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang