[node.js] 簡單的http爬蟲

用node實現了一個簡單的http爬蟲,在此向和我同樣正在學習node.js的朋友分享一下html

準備工做
1.node.js自己
2.cheerio模塊
能夠將html構建DOM結構,並提供像jquery同樣的選擇器。
經過npm install cheerio進行安裝html5

爬取頁面分析
我這裏選取的是segmentfault的未回答問題頁面進行爬取。
(url爲’http://segmentfault.com/quest...‘+頁碼)node

clipboard.png

要爬取的是未回答問題的標題及其代碼,從圖中咱們能夠看出,咱們所須要的內容都在div.summary下的h2.title中,因此咱們在獲取html代碼以後,能夠從這裏提取咱們須要的信息。mysql

代碼實現jquery

var http = require('http');
var cheerio = require('cheerio');
var seg_url = 'http://segmentfault.com/questions/unanswered?page=';

/*
 *用於過濾HTML代碼,並從中獲得咱們須要的信息
 *使用了cheerio模塊
 */
function filter_html(html){
    var $ = cheerio.load(html);
    var questions = $('div.summary');
    var questionDatas = [];
    questions.each(function(item){
        var summary = $(this);
        var question = summary.find('h2.title>a');
        var questionData = {
            title:question.text(),
            code:question.attr('href').split('q/')[1]
        };
        questionDatas.push(questionData);
    });
    questionDatas.forEach(function(item){
        console.log('title:'+item.title+' '+'code:'+item.code);
    });
}

var i = 1;//經過改變i的值能夠爬取多個頁面的未回答問題
/*
 *http.get接受兩個參數,第一個包含有hostname,port,headers等內容的對象或者字
 *符串(自動parse成對象),第二個參數是一個回調函數,用於對結果進行處理。這個方法
 *和  request方法幾乎一致,不一樣之處是get方法的method固定爲GET,而且會自動
 *觸發end事件
 */
http.get(seg_url+i,function(res){
    var html = '';
    res.on('data',function(data){
        html += data;
    });
    res.on('end',function(){
        filter_html(html);
    });
}).on('error',function(e){
    console.log('Error:'+e.message);
});

結果
最後的結果應該相似這樣:webpack

title:LLVM 中 CreatePHI 時,報錯 code:1010000004337912
title:求教ss-redir的iptables設置 code:1010000004337693
title:summernote 的pre問題 code:1010000004337464
title:Scheme解釋器中正則序是怎麼回事? code:1010000004336759
title:webpack編譯handlebars的問題 code:1010000004336625
title:你們以爲html5中的canvas怎麼使用呢? code:1010000004336370
title:移動版Safari不能自動播放mp3怎麼辦? code:1010000004336299
title:無線傳感器網絡的AODV協議有哪些不足之處? code:1010000004336203
title:Typecho沒法發表文章 code:1010000004335581
title:sphinx 以mysql爲數據源 建索引失敗 code:1010000004334330
………………
相關文章
相關標籤/搜索