//======================================================
// www.nvshens.com图片批量下载Node.js爬虫1.00
// 此程序与meitulu爬虫类似,先写个架子在这里
// 2017年11月9日
//======================================================

// 内置https模块
var https=require("https");

// 内置文件处理模块,用于创建目录和图片文件
var fs=require('fs');

// 请求参数JSON。http和https都有使用
var options;

// request请求
var req;

// https://img.onvshen.com:85/gallery/11519/11602/0.jpg'
//--------------------------------------
// 下载图片
// folder:图片所在url的一级目录
// subfolder:图片所在url的二级目录
// pinctureIndex:图片序号
//--------------------------------------
function downloadPic(folder,subfolder,pinctureIndex){
    console.log("图片:"+pinctureIndex+"下载开始");

    // 初始化options
    options={
        hostname:'img.onvshen.com',
            port:85,
            path:'/gallery/'+folder+"/"+subfolder+"/"+pinctureIndex+'.jpg',// 子路径
          method:'GET',
    };

    req=https.request(options,function(resp){
        var imgData = "";
        resp.setEncoding("binary"); 

        resp.on('data',function(chunk){
            imgData+=chunk;
        });

        resp.on('end',function(){
            // 创建目录
            fs.mkdir('./'+subfolder,function(err){
                if(err){
                    console.log("目录"+folder+"已经存在");
                }
            });

            // 创建文件
            var fileName="./"+subfolder+"/"+pinctureIndex+".jpg";
            fs.writeFile(fileName, imgData, "binary", function(err){
                if(err){
                    console.log("文件"+fileName+"下载失败.");
                    console.log(err);
                }else{
                    console.log("文件"+fileName+"下载成功");
                }
            });
        });
    });

    // 超时处理
    req.setTimeout(5000,function(){
        req.abort();
    });

    // 出错处理
    req.on('error',function(err){
        if(err.code=="ECONNRESET"){
            console.log('[downloadPic]socket端口连接超时。');
            console.log(err);
        }else{
            console.log('[downloadPic]请求发生错误,err.code:'+err.code);
            console.log(err);
        }
    });

    // 请求结束
    req.end();
}

/* 左边自动补零 质朴长存法  by lifesinger */
function pad(num, n) {
    var len = num.toString().length;
    while(len < n) {
        num = "0" + num;
        len++;
    }
    return num;
} 

// 下载一批
function start(){
    for(var i=1;i<55;i++){
        var fileName=pad(i,3);
        downloadPic('11519','11602',fileName);
    }
}

// 调用start函数,程序开始
start();

Node.js nvshens图片批量下载爬虫 1.00的更多相关文章

  1. Node.js nvshens图片批量下载爬虫1.01

    //====================================================== // nvshens图片批量下载爬虫1.01 // 用最近的断点续传框架改写原有1.0 ...

  2. Node.js mzitu图片批量下载爬虫1.00

    又攻下一座山头. //====================================================== // mzitu图片批量下载爬虫1.00 // 2017年11月19 ...

  3. Node.js 4493图片批量下载爬虫1.00

    这个爬虫依然需要iconv转码,想不到如今非utf8的网页还这么多.另外此网页找下一页的方式比较异常,又再次借助了正则表达式. 代码如下: //============================ ...

  4. Node.js monly图片批量下载爬虫1.00

    此爬虫又用到了iconv转码,代码如下: //====================================================== // mmonly图片批量下载爬虫1.00 ...

  5. Node.js m03122图片批量下载爬虫1.00

    //====================================================== // m03122图片批量下载爬虫1.00 // 2017年11月18日 //==== ...

  6. Node.js mm131图片批量下载爬虫1.00 iconv协助转码

    //====================================================== // mm131图片批量下载爬虫1.00 // 2017年11月15日 //===== ...

  7. Node.js mimimn图片批量下载爬虫 1.00

    这个爬虫在Referer设置上和其它爬虫相比有特殊性.代码: //====================================================== // mimimn图片批 ...

  8. Node.js mm131图片批量下载爬虫1.01 增加断点续传功能

    这里的断点续传不是文件下载时的断点续传,而是指在爬行页面时有时会遇到各种网络中断而从中断前的页面及其数据继续爬行的过程,这个过程和断点续传原理上相似故以此命名.我的具体做法是:在下载出现故障或是图片已 ...

  9. Node.js abaike图片批量下载爬虫1.02

    //====================================================== // abaike图片批量下载爬虫1.02 // 用最近的断点续传框架改写原有1.01 ...

随机推荐

  1. springmvc对于前台date类型注意点

    springmvc,可以自动将数据注入到: “name”值相同,便注入,比如String Integer 还有我们自定义的bean,比如User. 但是date类型的数据,如果前台传的是用" ...

  2. 2.docker容器

    docker run 镜像,生成镜像容器,并运行 有以下参数 --name="new name",为容器指定一个新名字 -d:后台运行容器,返回容器id,即启动守护式容器 -i:以 ...

  3. JavaScript秘密花园

    译文地址 bonsaiden.github.io/JavaScript-Garden/zh/#intro.authors 之前被人问到JS一些概念性的东西,感觉很模糊,可能层次比较浅,偏理论的东西实践 ...

  4. jquery.qrcode生成二维码支持中文

    基本使用方法: 1.首先在页面中加入jquery库文件和qrcode插件. <script type="text/javascript" src="jquery.j ...

  5. SVN代码提交

    SVN代码提交(转载) 原文链接:http://www.softown.cn/post/100.html 1.SVN代码提交 1) 原则 先更新再提交: SVN是为了多人协同开发而产生的,如果你在提交 ...

  6. 第一篇:Hello World

    Hello World RabbitMQ是一个消息代理:它接受和转发消息.你可以把它想象成一个邮局:当你把邮件放在邮箱里时,你可以确定邮差先生最终会把邮件发送给你的收件人.在这个比喻中,RabbitM ...

  7. Django组件之contenttype的应用

    contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中. 每当我们创建了新的model并执行数据库迁移后,Conte ...

  8. eclispe启动进入子项目的解决

    问题描述: In Package Explorer I right-clicked on project and selected "Open in New Window". Ne ...

  9. 使用vscode开发调试.net core应用程序并部署到Linux跨平台

    使用VS Code开发 调试.NET Core RC2应用程序,由于.NET Core 目前还处于预览版. 本文使用微软提供的示例进行开发及调试. https://github.com/aspnet/ ...

  10. Dart类

    Dart中没有访问控制符,无论类还是方法默认都是public 1.构造函数 构造函数可以没有方法体,并且this可以直接在传参时直接对实例赋值 Bicycle(this.cadence, this.s ...