nodejs爬蟲

爬蟲:把網頁爬下來(發送http請求,保存返回的結果,通常是html),分析html拿到有用數據。html

1、獲取頁面源碼

拿到http://www.imooc.com/learn/348的源碼【日期20170329】jquery

var http=require('http');
var url='http://www.imooc.com/learn/348';
http.get(url,function(res){
        var html='';
        res.on('data',function    (data){
            html+=data;
        })

        res.on('end',function(){
                console.log(html);
        });
}).on('error',function(){
    console.log('獲取課程數據出錯');
});

二、分析獲取html中有用數據

先安裝一個模塊cheerio,cheerio能夠理解成一個 Node.js 版的 jquery。npm

npm install cheerio數組

var http=require('http');
var cheerio=require('cheerio');
var url='http://www.imooc.com/learn/348';
//分析用cheerio模塊
function filterChapters(html){
    var $=cheerio.load(html);
    var chatpers=$('.chapter');//全部章節的數組
/*//指望的數據結構
    [{
        chapterTitle:'',
        videos:[
            title:'',
            id:''
        ]
    }]*/
    var courseData=[];
    chatpers.each(function(item){
        var chapter=$(this);
        var chapterTitle=chapter.find('strong').text();
        videos=chapter.find('.video').children('li');
        var chapterData={
            chapterTitle:chapterTitle,
            videos:[]
        };

        videos.each(function(item){
            var video=$(this).find('.J-media-item');
            var videoTitle=video.text();
            var id=video.attr('href').split('video/')[1];
            chapterData.videos.push({
                title:videoTitle,
                id:id
            })

        })
        courseData.push(chapterData);
    })
    return courseData;
}
/*打印方法*/
function printCourseInfo(courseData){
    courseData.forEach(function(item){
        var chapterTitle=item.chapterTitle;
        console.log(chapterTitle+'\n');
        item.videos.forEach(function(item){
            console.log('【'+item.id+'】'+item.title+'\n');
        })
    })
}

http.get(url,function(res){
        var html='';
        res.on('data',function    (data){
            html+=data;
        })

        res.on('end',function(){
            var courseData=filterChapters(html);
            printCourseInfo(courseData);
        });
}).on('error',function(){
    console.log('獲取課程數據出錯');
});

 

本文做者starof,因知識自己在變化,做者也在不斷學習成長,文章內容也不定時更新,爲避免誤導讀者,方便追根溯源,請諸位轉載註明出處:http://www.cnblogs.com/starof/p/6639505.html有問題歡迎與我討論,共同進步。數據結構

相關文章
相關標籤/搜索