zoukankan      html  css  js  c++  java
  • 【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在判断下载模式上花费了时间。

  • 相关阅读:
    mysq 日期相减
    说说时间观与时间管理——北漂18年(71)
    ionic之切换开关
    ionic之单选框
    SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE locks在RR模式下可以看到最新的记录
    14.5.2.3 Consistent Nonlocking Reads 一致性非锁定读
    14.5.2.2 autocommit, Commit, and Rollback
    14.5.2 事务隔离级别
    对于唯一索引使用唯一条件搜索, InnoDB 只锁定找到的index record,不是它之前的区间
    mysql explain 解释
  • 原文地址:https://www.cnblogs.com/heyang78/p/8674251.html
Copyright © 2011-2022 走看看