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(三)--- Node.js模块
May 25 NodeJs
nodejs事件的监听与触发的理解分析
Feb 12 NodeJs
nodejs和php实现图片访问实时处理
Jan 05 NodeJs
图片上传之FileAPI与NodeJs
Jan 24 NodeJs
Nodejs高扩展性的模板引擎 functmpl简介
Feb 13 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
Nodejs中的JWT和Session的使用
Aug 21 NodeJs
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
Mar 02 NodeJs
ubuntu系统下使用pm2设置nodejs开机自启动的方法
May 12 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&amp;&amp;mysql)六
2006/10/09 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
javascript常用方法汇总
2014/12/02 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
python中urllib模块用法实例详解
2014/11/19 Python
Python获取央视节目单的实现代码
2015/07/25 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
资产经营总监岗位职责
2013/12/04 职场文书
广告学专业求职信
2014/06/19 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书