Node.js 使用爬虫批量下载网络图片到本地

简介:

图片网站往往广告众多,用Node.js写个爬虫下载图片,代码不长,省事不少,比手动一张张保存简直是天与地的区别。以前用Java也做过远程图片下载,但Node.js的下载速度更让人咂舌,这也是非阻塞式变成的好处。

下面代码是一个从mtl.ttsqgs.com下载图片的程序,图片地址是看网站源码看出来的,总共有多少张也可以在网页或源码里找到,然后就是顺藤摸瓜。爬虫无外乎找规律再写代码实现的套路。

复制代码
// 内置http模块,提供了http服务器和客户端功能
var http=require("http");

// cheerio模块,提供了类似jQuery的功能
var cheerio = require("cheerio");

// 内置文件处理模块
var fs=require('fs');

// 请求参数JSON
var options;

// 请求并获得数据
var req;

var index=1; // 起始页码
var endIndex=43; // 终止页码

function downloadImg(pageNumber){
    console.log("开始读取第"+pageNumber+"页");

    // eg:http://mtl.ttsqgs.com/images/img/4527/3.jpg
    options={
        hostname:'mtl.ttsqgs.com',// 这里别加http://,否则会出现ENOTFOUND错误
            port:80,
            path:'/images/img/798/'+pageNumber+'.jpg',// 子路径
          method:'GET',
    };
    
    req=http.request(options,function(resp){
        var imgData = "";
        resp.setEncoding("binary"); 

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

        resp.on('end',function(){
            var fileName="./xyyx/"+pageNumber+".jpg";
            fs.writeFile(fileName, imgData, "binary", function(err){
                if(err){
                    console.log("文件"+fileName+"下载失败.");
                }
                console.log(fileName+"下载成功");
            });    
        });
    });

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

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

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

    // 43页调完
    if(index<endIndex){        
        index++;
        console.log('继续第'+index+'页');
        start(index);
    }
}

// 包一层函数
function start(i){
    downloadImg(i);
}

// 开始
start(index);
复制代码
相关文章
|
1月前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
4月前
|
存储 安全 JavaScript
云计算浪潮中的网络安全之舵探索Node.js中的异步编程模式
【8月更文挑战第27天】在数字化时代的风帆下,云计算如同一片广阔的海洋,承载着企业与个人的数据梦想。然而,这片海洋并非总是风平浪静。随着网络攻击的波涛汹涌,如何确保航行的安全成为了每一个船员必须面对的挑战。本文将探索云计算环境下的网络安全策略,从云服务的本质出发,深入信息安全的核心,揭示如何在云海中找到安全的灯塔。
|
4月前
|
JavaScript 算法 前端开发
采招网JS逆向:基于AES解密网络数据
采招网JS逆向:基于AES解密网络数据
71 0
|
2月前
|
数据采集 JSON 前端开发
JavaScript逆向爬虫实战分析
JavaScript逆向爬虫实战分析
33 4
|
2月前
|
数据采集 JavaScript 前端开发
JavaScript逆向爬虫——使用Python模拟执行JavaScript
JavaScript逆向爬虫——使用Python模拟执行JavaScript
39 2
|
2月前
|
数据采集 JavaScript 前端开发
JavaScript逆向爬虫——无限debugger的原理与绕过
JavaScript逆向爬虫——无限debugger的原理与绕过
101 2
|
2月前
|
数据采集 前端开发 JavaScript
JavaScript逆向爬虫(一)
JavaScript逆向爬虫(一)
39 1
|
2月前
|
数据采集 编解码 前端开发
JavaScript逆向爬虫(二)
JavaScript逆向爬虫(二)
30 1
|
1月前
|
数据采集 JavaScript 前端开发
JavaScript重定向对网络爬虫的影响及处理
JavaScript重定向对网络爬虫的影响及处理
|
2月前
|
存储 资源调度 JavaScript
vue.js【网络请求和状态管理】
vue.js【网络请求和状态管理】