在imooc網上跟着老師寫了兩個爬蟲,一個最簡單的直接爬整個頁面,一個完善版把章節標題和對應編號打出來了。html
看完以後,本身也想寫一個爬蟲,用本身的博客作測試,雖然結果並無很成功- -,仍是把代碼放上來。jquery
目標是抓取章節的標題。服務器
博客頁面:ide
對應標籤:測試
頁面源代碼:ui
通過分析,咱們應該要抓取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('獲取博客數據出錯'); })