您好,登錄后才能下訂單哦!
在imooc網(wǎng)上跟著老師寫了兩個(gè)爬蟲,一個(gè)最簡(jiǎn)單的直接爬整個(gè)頁面,一個(gè)完善版把章節(jié)標(biāo)題和對(duì)應(yīng)編號(hào)打出來了。
看完之后,自己也想寫一個(gè)爬蟲,用自己的博客做測(cè)試,雖然結(jié)果并沒有很成功- -,還是把代碼放上來。
目標(biāo)是抓取章節(jié)的標(biāo)題。
博客頁面:
對(duì)應(yīng)標(biāo)簽:
頁面源代碼:
經(jīng)過分析,我們應(yīng)該要抓取class=artHead的<div>,往下還有一個(gè)沒有類的<div>,然后找到它的<h4>標(biāo)簽下子標(biāo)簽<a>的內(nèi)容,就是章節(jié)的名字。
上代碼:
//引入http模塊 var http = require('http'); //確定要抓取的頁面 //debug:本來寫了qmkkd.blog.51cto.com,一直出錯(cuò),在前面加上http就好了。 var url = '';//這里的url是'http://qmkkd.blog.51cto.com';,博客顯示不出來,有毒 //引入cherrio模塊,類似服務(wù)器端的jquery var cheerio=require('cheerio'); function filterChapters(html){ //將html變成jquery對(duì)象 var $ = cheerio.load(html); var artHeads = $('.artHead'); var blogData=[]; artHeads.each(function(item){ var artHead = $(this); //獲取文章標(biāo)題 var artTitle = artHead.find('h4').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; }); //網(wǎng)上找到的處理中文亂碼問題的方法,但好像沒有解決T_T //之后還采用了bufferhelper類,好像也不對(duì)=-= //應(yīng)該是基礎(chǔ)不好的問題,暫時(shí)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(){ //執(zhí)行http請(qǐng)求失敗時(shí),返回錯(cuò)誤信息 console.log('獲取博客數(shù)據(jù)出錯(cuò)'); })
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。