nodeJS實(shí)現(xiàn)簡(jiǎn)單網(wǎng)頁(yè)爬蟲(chóng)功能的實(shí)例(分享)
本文將使用nodeJS實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)頁(yè)爬蟲(chóng)功能
網(wǎng)頁(yè)源碼
使用http.get()方法獲取網(wǎng)頁(yè)源碼,以hao123網(wǎng)站的頭條頁(yè)面為例
http://tuijian.hao123.com/hotrank
var http = require('http');
http.get('http://tuijian.hao123.com/hotrank',function(res){
var data = '';
res.on('data',function(chunk){
data += chunk;
});
res.on('end',function(){
console.log(data);
})
});獲得的結(jié)果如下所示:
篩選數(shù)據(jù)
以網(wǎng)頁(yè)中的綜藝熱點(diǎn)部分

相關(guān)源代碼如下

通過(guò)分析可知,‘綜藝’模塊與其他模塊都位于<div class="top-wrap">中,其中,綜藝模塊的內(nèi)層div的monkey='zy',綜藝模塊的10條綜藝節(jié)目的信息都位于<div class="poinr clearfix">中,綜藝節(jié)目的名稱位于<span class="point-title">中
cheerio
我們?cè)趺磸脑创a中獲取到有用的數(shù)據(jù)呢?首先,nodeJS不支持document對(duì)象。如果要使用笨辦法,只能使用正則表達(dá)式來(lái)處理
cheerio 是nodejs特別為服務(wù)端定制的,能夠快速靈活的對(duì)JQuery核心進(jìn)行實(shí)現(xiàn)。它工作于DOM模型上,且解析、操作、呈送都很高效
【安裝】

【使用】
它的使用方法和jQuery相當(dāng)類似,上手非常容易。以獲取綜藝熱度前10名的節(jié)目名稱為例
var http = require('http');
var cheerio = require('cheerio');
http.get('http://tuijian.hao123.com/hotrank',function(res){
var data = '';
res.on('data',function(chunk){
data += chunk;
});
res.on('end',function(){
filter(data);
})
});
function filter(data){
//保存搜索量前10的綜藝節(jié)目標(biāo)題
var result = [];
//將頁(yè)面源代碼轉(zhuǎn)換為$對(duì)象
var $ = cheerio.load(data);
//查找每個(gè)綜藝節(jié)目標(biāo)題的外層div
var temp_arr = $('[monkey = "zy"]').find('.point-bd').find('.point-title');
//將綜藝節(jié)目標(biāo)題依次保存到結(jié)果數(shù)組中
temp_arr.each(function(index,item){
result.push($(item).text());
})
//[ '變形計(jì)','來(lái)吧冠軍','拜托了冰箱','昆侖決','天生是優(yōu)我','姐姐好餓','腦力男人時(shí)代','奔跑吧兄弟','我想和你唱','玫瑰之旅' ]
console.log(result);
}爬蟲(chóng)代碼
下面將hao123網(wǎng)頁(yè)中的'實(shí)時(shí)熱點(diǎn)'、'今日熱點(diǎn)'、'民生熱點(diǎn)'、'電影'、'電視劇'、'綜藝'這6部分的排名爬下來(lái),分別到對(duì)象名為'result'中的數(shù)組中,分別命令為'ss'、'jr'、'ms'、'dy'、'dsj'、'zy'

【代碼如下】
var http = require('http');
var cheerio = require('cheerio');
http.get('http://tuijian.hao123.com/hotrank',function(res){
var data = '';
res.on('data',function(chunk){
data += chunk;
});
res.on('end',function(){
filter(data);
})
});
function filter(data){
//保存各部分搜索量前10的名稱
//對(duì)象名為榜單名,如'實(shí)時(shí)熱點(diǎn)'
//對(duì)象內(nèi)容為10個(gè)標(biāo)題名稱組成的數(shù)組
var result = {};
//將頁(yè)面源代碼轉(zhuǎn)換為$對(duì)象
var $ = cheerio.load(data);
//查找'實(shí)時(shí)熱點(diǎn)'、'今日熱點(diǎn)'、'民生熱點(diǎn)'、'電影'、'電視劇'、'綜藝'這6個(gè)榜單所在的div
var temp_div = $('.top-wrap');
//保存榜單名稱
var temp_title = [];
temp_div.each(function(index,item){
//查找榜單名,并保存到temp_title文件夾中
temp_title.push($(item).find('h2').text());
//查找每類下每個(gè)標(biāo)題的外層div
var temp_arr = $(item).find('.point-bd').find('.point-title');
//將result下的每個(gè)榜單初始化為一個(gè)數(shù)組
var innerResult = result[temp_title[index]] = [];
//將節(jié)目標(biāo)題依次保存到相應(yīng)榜單的數(shù)組中
temp_arr.each(function(_index,_item){
innerResult.push($(_item).text())
})
})
console.log(result);
}【結(jié)果如下】
以上這篇nodeJS實(shí)現(xiàn)簡(jiǎn)單網(wǎng)頁(yè)爬蟲(chóng)功能的實(shí)例(分享)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
node?gyp安裝canvas原生模塊編譯node?pregyp詳解
這篇文章主要為大家介紹了Nodejs關(guān)于原生模塊編譯node-gyp + node-pre-gyp (以安裝canvas為例)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
node.js用fs.rename強(qiáng)制重命名或移動(dòng)文件夾的方法
本篇文章主要介紹了node.js用fs.rename強(qiáng)制重命名或移動(dòng)文件夾的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
基于NodeJS開(kāi)發(fā)釘釘回調(diào)接口實(shí)現(xiàn)AES-CBC加解密
這篇文章主要介紹了基于NodeJS開(kāi)發(fā)釘釘回調(diào)接口 實(shí)現(xiàn)AES-CBC加解密,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
基于websocket實(shí)現(xiàn)簡(jiǎn)單聊天室對(duì)話
這篇文章主要為大家詳細(xì)介紹了基于websocket實(shí)現(xiàn)簡(jiǎn)單聊天室對(duì)話,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
node.js中實(shí)現(xiàn)同步操作的3種實(shí)現(xiàn)方法
這篇文章主要介紹了node.js中實(shí)現(xiàn)同步操作的3種實(shí)現(xiàn)方法,本文用實(shí)例講解一些需要同步操作的情況下,如何編程實(shí)現(xiàn),需要的朋友可以參考下2014-12-12
nodejs清空/刪除指定文件夾下面所有文件或文件夾的方法示例
這篇文章主要介紹了nodejs清空/刪除指定文件夾下面所有文件或文件夾的方法,通過(guò)兩個(gè)具體案例形式分析了node.js同步刪除文件/文件夾,以及異步刪除文件/文件夾的相關(guān)實(shí)現(xiàn)技巧,涉及遞歸遍歷與文件判斷、回調(diào)等相關(guān)操作,需要的朋友可以參考下2023-04-04

