node http fs 實現 抓取網頁源碼並保存

/*
author:star

*/
var fs=require('fs');
var http=require('http');

//urls 爲url參數數組。
var urls=['http://www.baidu.com','http://www.baidu.com','http://www.baidu.com','http://www.baidu.com']
urls=urls.concat(urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls,urls)
urls.push('http://www.bfdaai.com')

var FileName='pages';//文件名
var k=6;//併發數


//創建文件夾
if(!fs.existsSync(FileName)){
	fs.mkdirSync(FileName)
}

function timeFn(num){
	this.num=num;	
	this.req();
}
timeFn.prototype.req=function(){
	this.url=urls.pop();		
	if(this.url){
		console.log('request',this.url,this.num);
		this.get();
	}
}
timeFn.prototype.get=function(){
	var that=this;
	var url=this.url.split('://')[1];
	var name=url.replace(/[\:\/\\\.\?\&\=\-]/g,'_')+Math.floor(Math.random()*999)
	var h=http.request({host:url,method:'get'},function(res){
		var file=fs.createWriteStream(FileName+'/'+name+'.html');
		res.setEncoding('utf8');
	    res.pipe(file)
	    res.on('end',function(){	    	
	    	that.req();
	    })
	})
	h.on('error',function(err){
		console.log(url,err)//輸出錯誤
		that.req();	
	}).end()
}


function retfn(num){
	var arr=[];
	for(var i=0;i<num;i++){
		(function(i){			
			arr.push(new timeFn(i));
		}(i))
	}	
}
retfn(k)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章