node.js實(shí)現(xiàn)爬蟲教程
一、前言
說是爬蟲初探,其實(shí)并沒有用到爬蟲相關(guān)第三方類庫,主要用了node.js基礎(chǔ)模塊http、網(wǎng)頁分析工具cherrio。 使用http直接獲取url路徑對應(yīng)網(wǎng)頁資源,然后使用cherrio分析。 這里我主要學(xué)習(xí)過的案例自己敲了一遍,加深理解。在coding的過程中,我第一次把jq獲取后的對象直接用forEach遍歷,直接報(bào)錯(cuò),是因?yàn)閖q沒有對應(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
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Node.js編寫爬蟲的基本思路及抓取百度圖片的實(shí)例分享
- 基于Node.js的強(qiáng)大爬蟲 能直接發(fā)布抓取的文章哦
- 利用node.js寫一個(gè)爬取知乎妹紙圖的小爬蟲
- 利用Node.js制作爬取大眾點(diǎn)評的爬蟲
- Node.js 實(shí)現(xià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)頁請求模塊
- node.js爬蟲爬取拉勾網(wǎng)職位信息
相關(guān)文章
Node.js定時(shí)任務(wù)之node-schedule使用詳解
這篇文章主要介紹了Node.js定時(shí)任務(wù)之node-schedule使用詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
nodejs 實(shí)現(xiàn)模擬form表單上傳文件
使用nodejs來模擬form表單進(jìn)行文件上傳,可以同時(shí)上傳多個(gè)文件。2014-07-07
Nodejs中使用puppeteer控制瀏覽器中視頻播放功能
本項(xiàng)目主要功能為在瀏覽器中自動(dòng)播放視頻,并且實(shí)現(xiàn)音量控制,快進(jìn)快退,全屏控制,播放暫??刂频裙δ?。對Nodejs中使用puppeteer控制瀏覽器中視頻播放功能感興趣的朋友跟隨小編一起看看吧2019-08-08
解決使用node命令提示:'node'不是內(nèi)部或外部命令,也不是可運(yùn)行的程序
最近在工作中遇到了個(gè)常見的問題,分享給大家,這篇文章主要給大家介紹了關(guān)于如何解決使用node命令提示:'node'不是內(nèi)部或外部命令,也不是可運(yùn)行的程序的相關(guān)資料,需要的朋友可以參考下2023-02-02
Ubuntu中搭建Nodejs開發(fā)環(huán)境過程分享
這篇文章主要介紹了Ubuntu中搭建Nodejs開發(fā)環(huán)境過程,比較郁悶的是apt-get安裝失敗了,如果有遇到一樣問題的朋友,可以參考一下本文2014-06-06
解決npm?install版本不匹配問題:?npm?ERR!?code?ETARGET?npm?ERR!?
這篇文章主要介紹了如何解決npm?install版本不匹配問題:?npm?ERR!?code?ETARGET?npm?ERR!?notarget?No?matching?version?found?for,文中給出了詳細(xì)的解決方法,需要的朋友可以參考下2024-02-02
Node.js設(shè)置定時(shí)任務(wù)之node-schedule模塊的使用詳解
node-schedule是 Node.js 的一個(gè)定時(shí)任務(wù)(crontab)模塊。這篇文章主要介紹了Node.js設(shè)置定時(shí)任務(wù)之node-schedule模塊的使用,需要的朋友可以參考下2020-04-04

