首頁  >  文章  >  web前端  >  node.js基礎模組http、網頁分析工具cherrio實作爬蟲_node.js

node.js基礎模組http、網頁分析工具cherrio實作爬蟲_node.js

WBOY
WBOY原創
2016-05-16 15:11:081891瀏覽

一、前言
      說是爬蟲初探,其實並沒有用到爬蟲相關第三方類別庫,主要用了node.js基礎模組http、網頁分析工具cherrio。 使用http直接取得url路徑對應網頁資源,然後使用cherrio分析。 這裡我主要學習過的案例自己敲了一遍,加深理解。在coding的過程中,我第一次把jq取得後的物件直接用forEach遍歷,直接報錯,是因為jq沒有對應的這個方法,只有js陣列可以呼叫。

二、知識點
    ①:superagent抓去網頁工具。我暫時未用。
    ②:cherrio 網頁分析工具,你可以理解其為服務端的jQuery,因為文法都一樣。
效果圖

1、抓取整個網頁

 

2、分析後的數據,提供的範例為案例實現的範例。

爬蟲初探源碼分析

var http=require('http');
var cheerio=require('cheerio');
 
var url='http://www.imooc.com/learn/348';
 
/****************************
打印得到的数据结构
[{
 chapterTitle:'',
 videos:[{
  title:'',
  id:''
 }]
}]
********************************/
function printCourseInfo(courseData){
 courseData.forEach(function(item){
  var chapterTitle=item.chapterTitle;
  console.log(chapterTitle+'\n');
  item.videos.forEach(function(video){
   console.log(' 【'+video.id+'】'+video.title+'\n');
  })
 });
}
 
 
/*************
分析从网页里抓取到的数据
**************/
function filterChapter(html){
 var courseData=[];
 
 var $=cheerio.load(html);
 var chapters=$('.chapter');
 chapters.each(function(item){
  var chapter=$(this);
  var chapterTitle=chapter.find('strong').text(); //找到章节标题
  var videos=chapter.find('.video').children('li');
 
  var chapterData={
   chapterTitle:chapterTitle,
   videos:[]
  };
 
  videos.each(function(item){
   var video=$(this).find('.studyvideo');
   var title=video.text();
   var id=video.attr('href').split('/video')[1];
 
   chapterData.videos.push({
    title:title,
    id:id
   })
  })
 
  courseData.push(chapterData);
 });
 
 return courseData;
}
 
http.get(url,function(res){
 var html='';
 
 res.on('data',function(data){
  html+=data;
 })
 
 res.on('end',function(){
  var courseData=filterChapter(html);
  printCourseInfo(courseData);
 })
}).on('error',function(){
 console.log('获取课程数据出错');
})

參考資料:
https://github.com/alsotang/node-lessons/tree/master/lesson3

http://www.imooc.com/video/7965

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn