Node.js實現單頁面爬蟲

    在imooc網上跟着老師寫了兩個爬蟲,一個最簡單的直接爬整個頁面,一個完善版把章節標題和對應編號打出來了。html

    看完以後,本身也想寫一個爬蟲,用本身的博客作測試,雖然結果並無很成功- -,仍是把代碼放上來。jquery

    目標是抓取章節的標題。服務器


    博客頁面:ide

wKiom1eSLTqyNsHGAAE3M29Z1FA645.png


對應標籤:測試

wKioL1eSLTuzNUiTAABghDqCuL4871.png


頁面源代碼:ui

wKiom1eSLTvz4bj1AADp9_9EH8Y365.png


    通過分析,咱們應該要抓取class=artHead的<div>,往下還有一個沒有類的<div>,而後找到它的<h3>標籤下子標籤<a>的內容,就是章節的名字。this


    上代碼:url

//引入http模塊
var http = require('http');

//肯定要抓取的頁面 
//debug:原本寫了qmkkd.blog.51cto.com,一直出錯,在前面加上http就行了。
var url = '';//這裏的url是'http://qmkkd.blog.51cto.com';,博客顯示不出來,有毒 
 
//引入cherrio模塊,相似服務器端的jquery
var cheerio=require('cheerio');


function filterChapters(html){

	//將html變成jquery對象
	var $ = cheerio.load(html);
	
	var artHeads = $('.artHead');
	
	var blogData=[];
	
	artHeads.each(function(item){
		var artHead = $(this);
		
		//獲取文章標題
		var artTitle = artHead.find('h3').children('a').text();
		blogData.push(artTitle);
	})
	return blogData;
}


function printBlogInfo(blogData){
	blogData.forEach(function(item){
		var artTitle = item;
		console.log(item+'\n');
	})
}

http.get(url,function(res){
	
	var buffers=[];
	var nread = 0;

	res.on('data',function(data){
		buffers.push(data);
		nread+=data.length;
	});
	
	//網上找到的處理中文亂碼問題的方法,但好像沒有解決T_T
	//以後還採用了bufferhelper類,好像也不對=-= 
	//應該是基礎很差的問題,暫時debug不了,先放着
	res.on('end',function(){
		var buffer =null;
		switch(buffers.length){
			case 0:buffer=new Buffer(0);
				break;
			case 1:buffer=buffers[0];
				break;
			default:
				buffer = new Buffer(nread);
				for(var i=0,pos=0,l=buffers.length;i<l;i++){
					var chunk = buffers[i];
					chunk.copy(buffer,pos);
					pos+=chunk.length;
				}
				break;
		}
		var html=buffer.toString();

		var blogData = filterChapters(html);
		printBlogInfo(blogData);
	})
}).on('error',function(){   //執行http請求失敗時,返回錯誤信息
	console.log('獲取博客數據出錯');
})
相關文章
相關標籤/搜索