node.js實(shí)現(xiàn)爬蟲教程
一、前言
說是爬蟲初探,其實(shí)并沒有用到爬蟲相關(guān)第三方類庫,主要用了node.js基礎(chǔ)模塊http、網(wǎng)頁分析工具cherrio。 使用http直接獲取url路徑對(duì)應(yīng)網(wǎng)頁資源,然后使用cherrio分析。 這里我主要學(xué)習(xí)過的案例自己敲了一遍,加深理解。在coding的過程中,我第一次把jq獲取后的對(duì)象直接用forEach遍歷,直接報(bào)錯(cuò),是因?yàn)閖q沒有對(duì)應(yīng)的這個(gè)方法,只有js數(shù)組可以調(diào)用。
二、知識(shí)點(diǎn)
①:superagent抓去網(wǎng)頁工具。我暫時(shí)未用到。
②:cherrio 網(wǎng)頁分析工具,你可以理解其為服務(wù)端的jQuery,因?yàn)檎Z法都一樣。
效果圖
1、抓取整個(gè)網(wǎng)頁

2、分析后的數(shù)據(jù),提供的示例為案例實(shí)現(xiàn)的例子。

爬蟲初探源碼分析
var http=require('http');
var cheerio=require('cheerio');
var url='http://www.imooc.com/learn/348';
/****************************
打印得到的數(shù)據(jù)結(jié)構(gòu)
[{
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');
})
});
}
/*************
分析從網(wǎng)頁里抓取到的數(shù)據(jù)
**************/
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(); //找到章節(jié)標(biāo)題
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('獲取課程數(shù)據(jù)出錯(cuò)');
})
參考資料:
https://github.com/alsotang/node-lessons/tree/master/lesson3
http://www.imooc.com/video/7965
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Node.js編寫爬蟲的基本思路及抓取百度圖片的實(shí)例分享
- 基于Node.js的強(qiáng)大爬蟲 能直接發(fā)布抓取的文章哦
- 利用node.js寫一個(gè)爬取知乎妹紙圖的小爬蟲
- 利用Node.js制作爬取大眾點(diǎn)評(píng)的爬蟲
- Node.js 實(shí)現(xiàn)簡(jiǎn)單小說爬蟲實(shí)例
- 手把手教你用Node.js爬蟲爬取網(wǎng)站數(shù)據(jù)的方法
- node.js實(shí)現(xiàn)博客小爬蟲的實(shí)例代碼
- Node.js環(huán)境下編寫爬蟲爬取維基百科內(nèi)容的實(shí)例分享
- 淺談Node.js爬蟲之網(wǎng)頁請(qǐng)求模塊
- node.js爬蟲爬取拉勾網(wǎng)職位信息
相關(guān)文章
輕松創(chuàng)建nodejs服務(wù)器(8):非阻塞是如何實(shí)現(xiàn)的
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(8):非阻塞是如何實(shí)現(xiàn)的,本文著重分析非阻塞的實(shí)現(xiàn),對(duì)代碼進(jìn)行了分解,需要的朋友可以參考下2014-12-12
深入淺析Node.js 事件循環(huán)、定時(shí)器和process.nextTick()
這篇文章主要介紹了Node.js 事件循環(huán)、定時(shí)器和process.nextTick()的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10
淺談node使用jwt生成的token應(yīng)該存在哪里
早上逛某乎的時(shí)候,遇到一位同學(xué)在問這個(gè)問題,很好奇jwt的存儲(chǔ)位置。本文詳細(xì)的介紹一下,感興趣的可以了解一下2021-06-06
node.js中實(shí)現(xiàn)kindEditor圖片上傳功能的方法教程
最近在做一個(gè)類似于論壇的系統(tǒng),帖子需要進(jìn)行圖文并茂的顯示,所以用到了富文本編輯器:kindeditor,下面這篇文章主要給大家介紹了在node.js中實(shí)現(xiàn)kindEditor圖片上傳功能的方法教程,需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04
Node.js命令行/批處理中如何更改Linux用戶密碼淺析
這篇文章主要給大家介紹了關(guān)于Node.js命令行/批處理中如何更改Linux用戶密碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
node+koa實(shí)現(xiàn)數(shù)據(jù)mock接口的方法
本篇文章主要介紹了node+koa實(shí)現(xiàn)數(shù)據(jù)mock接口的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09

