zoukankan      html  css  js  c++  java
  • 【Nodejs】使用http.request批量下载MP3,发现网络文件大于1000K时下载文件为0K

    这又一次让我对http.request产生质疑

    //======================================================
    // 喜爱123四年级上英语MP3下载爬虫1.00
    // 2018年5月10日
    //======================================================
    var http=require("http");            // http模块
    var https=require("https");            // https模块
    var zlib = require('zlib');            // 用于解析gzip网页
    var fs=require('fs');                // 文件处理模块
    var iconv = require('iconv-lite');    // 用于转码。
    var cheerio = require("cheerio");    // 用于从HTML中以类似jquery方式查找目标
    
    
    //--------------------------------------
    // 下载单个mp3
    //--------------------------------------
    function downloadMp3(url){
        console.log("mp3:"+url+"下载开始");
    
        // 得到hostname,path和port
        var currUrl=url.replace("http://","");
        var pos=currUrl.indexOf("/");
        var hostname=currUrl.slice(0,pos);        
        var path=currUrl.slice(pos);
    
        // 有端口加端口,没有端口默认80
        var port=80;
        if(hostname.indexOf(":")!=-1){
            var arr=hostname.split(":");
            hostname=arr[0];
            port=arr[1];
        }
    
        var name=url.slice(url.lastIndexOf("/"));
        
        // 初始化options  
        options={
            hostname:hostname,
                port:port,
                path:path,
              method:'GET',
            /* headers:{
                'Referer':'https://www.nvshens.com',
              },*/  // 有需要再打开
        };
    
        req=http.request(options,function(resp){
            var imgData = "";
            resp.setEncoding("binary"); 
    
            resp.on('data',function(chunk){
                imgData+=chunk;            
            });
    
            resp.on('end',function(){        
    
                // 创建文件
                var fileName="./"+name;
                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('[downloadMp3]文件   '+url+"  下载失败,"+'因为'+err);
            }
        });
    
        // 请求结束
        req.end();
    }
    
    
    //-------------------------------
    // 入口函数
    //-------------------------------
    function main(){
        var profix='http://ting.xiai123.com/mp3/kewen/wysyy4s/Module0';
        var appendixs=['Unit1','Unit2','Words'];
    
        for(var i=1;i<10;i++){
            for(var j=0;j<appendixs.length;j++){
                var url=profix+i+'_'+appendixs[j]+".mp3";
                downloadMp3(url);
            }
        }
    
        
        //downloadMp3('http://ting.xiai123.com/mp3/kewen/wysyy4s/Module01_Unit2.mp3');
    }
    
    // 开始
    main();

    2018年5月10日13点44分

  • 相关阅读:
    Java String.format 方法使用介绍
    Android获取SD卡中选中图片的路径(URL)
    第三届蓝桥杯Java高职组决赛第一题
    Source Insight使用小技巧小结
    用android代码显示图片的一部分源码
    Liferay的架构:缓存(第一部分)
    Linux登录ssh携带密码
    about flashback_transaction_query
    数据库系统概念读书笔记——实体-联系模型
    Android Phone和Pad UA区别
  • 原文地址:https://www.cnblogs.com/heyang78/p/9019254.html
Copyright © 2011-2022 走看看