• 【Python】【Nodejs】下载单张图片到本地,Python和Nodejs的比较


    Python版本:

    # 下载单张图片到本地,看用时多少
    import urllib.request
    import datetime
    
    starttime = datetime.datetime.now()
    pic='https://img.onvshen.com:85/gallery/23789/22210/s/0.jpg'
    
    name=pic.split('/')[-1]
    
    rsp=urllib.request.urlopen(pic)
    img=rsp.read()
    with open(name,'wb') as f:
        f.write(img)
    print('图片'+pic+'下载完成')
    
    endtime = datetime.datetime.now()
    print("下载用时"+str((endtime - starttime).seconds)+"")

    Nodejs版本:

    // 内置https模块
    var https=require("https");
    
    // 内置文件处理模块,用于创建目录和图片文件
    var fs=require('fs');
    
    function downloadPic(picUrl){
        console.log("图片:"+picUrl+"下载开始");
    
        // 得到hostname,path和port
        var currUrl=picUrl.replace("https://","");
        var pos=currUrl.indexOf("/");
        var hostname=currUrl.slice(0,pos);        
        var path=currUrl.slice(pos);
    
        // 有端口加端口,没有端口默认80
        var port=85;
        if(hostname.indexOf(":")!=-1){
            var arr=hostname.split(":");
            hostname=arr[0];
            port=arr[1];
        }
    
        //console.log("hostname="+hostname);
        //console.log("path="+path);
        //console.log("port="+port);
    
        var picName=currUrl.slice(currUrl.lastIndexOf("/"));
        
        // 初始化options  
        options={
            hostname:hostname,
                port:port,
                path:path,
              method:'GET',
            /* headers:{
                'Referer':'https://www.nvshens.com',
              },*/  // 有需要再打开
        };
    
        req=https.request(options,function(resp){
            var imgData = "";
            resp.setEncoding("binary"); 
    
            resp.on('data',function(chunk){
                imgData+=chunk;            
            });
    
            resp.on('end',function(){        
    
                // 创建文件
                var fileName="./"+picName;
                fs.writeFile(fileName, imgData, "binary", function(err){
                    if(err){
                        console.log("[downloadPic]文件   "+fileName+"  下载失败.");
                        console.log(err);                    
                    }else{                   
                        console.log("文件"+fileName+"下载成功");
                    }
                });    
            });
        });
    
        // 超时处理
        req.setTimeout(7500,function(){
            req.abort();
        });
    
        // 出错处理
        req.on('error',function(err){
            if(err){
                console.log('[downloadPic]文件   '+picUrl+"  下载失败,"+'因为'+err);
                appendToLogfile(folder,"文件"+picUrl+"下载失败.
    ");
            }
        });
    
        // 请求结束
        req.end();
    }
    
    console.time("共花费了");
    downloadPic('https://img.onvshen.com:85/gallery/23789/22210/s/0.jpg')
    console.timeEnd("共花费了"); 

    感觉Nodejs的更快些,可能是Python在判断下载模式上花费了时间。

  • 相关阅读:
    如何在linux下使用sudo命令不用输入密码
    QT读写ini配置文件
    dubbo的灰度发布
    dubbo的重试原则
    dubbo的启动时检查
    dubbo的超时处理和配置覆盖
    dubbo配置文件加载顺序
    java基础-泛型的优点
    idea提交多个项目到github的同一个repository
    【掌握】dubbo环境搭建linux
  • 原文地址:https://www.cnblogs.com/heyang78/p/8674251.html
Copyright © 2020-2023  润新知