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