觸屏版
全國(guó)服務(wù)熱線:0571-87205688
登錄
注冊(cè)
客戶中心
關(guān)注云客
NodeJS是最近非?;鸬囊粋€(gè)JS框架,百科的介紹是輕量高效的基于事件驅(qū)動(dòng)的JS運(yùn)行平臺(tái)。
使用NodeJS的原因有3個(gè),一是它的代碼寫法基于JS,比較容易寫。已經(jīng)有入門級(jí)別的經(jīng)驗(yàn)了。另一個(gè)就是它的一個(gè)庫(kù)Cheerio,可以用幾乎和jQuery一模一樣的方式來(lái)操作源碼里面的Dom元素。這個(gè)什么意思稍候會(huì)講。第三個(gè)是它可以做為本地端,也可以布到服務(wù)器上去。
這2天研究比較多,應(yīng)該算是初級(jí)入門了。正好有個(gè)需求要處理,于是應(yīng)用了NodeJS。
一、安裝
網(wǎng)上有很多的教程,下載到https://nodejs.org,在Win系統(tǒng)下運(yùn)行就可以搭上一個(gè)環(huán)境。下載Windows的Installer版本,雙擊安裝,就成功了。
然后配置神器Sublime開始使用。
為Sublime添加實(shí)時(shí)調(diào)試運(yùn)行,打開Sublime-》Tools-》Build System-》New Build System
在新打開的文件中寫入下面的代碼
{
"cmd": ["node", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.javascript"
}
然后保存為NodeJS.sublime-build.
新建一個(gè)采集.js文件,設(shè)為NodeJS進(jìn)行運(yùn)行調(diào)試。
1
二、注意
在nodejs里面需要require(庫(kù)名)的方式來(lái)引用一些外部的庫(kù),這些外部的庫(kù)安裝NodeJS的時(shí)候,已經(jīng)放在C盤的programfiles下面了。但是直接require是無(wú)效的。
因?yàn)镹odeJS提倡的是自己的代碼用自己的庫(kù),所以還需要把庫(kù)復(fù)制到采集.js這個(gè)文件下面。
引用的時(shí)候可以通過npm link 庫(kù)名的方式,來(lái)把系統(tǒng)C盤的庫(kù)引用到我們的項(xiàng)目下面。
2
三、直接使用了
//采集頁(yè)面內(nèi)容到本地
var http = require("http");
var cheerio = require('cheerio'); //引用cheerio模塊,使在服務(wù)器端像在客戶端上操作DOM,不用正則表達(dá)式,據(jù)基準(zhǔn)測(cè)試:cheerio大約比JsDom快8倍。
var iconv = require('iconv-lite'); //解決編碼轉(zhuǎn)換模塊
var BufferHelper = require('bufferhelper'); //關(guān)于Buffer我后面細(xì)說
var data=download('http://blog.csdn.net/kissliux/article/details/20466889',function (data) {
//console.log(data);
var $=cheerio.load(data);//載入到cheerio進(jìn)行分析
//遍歷DIV
// $('a').each(function(i,e){
// console.log($(e).attr('href'));
// });
// 遍歷鏈接
// $("a.downbtn").each(function(i, e) {
// console.log($(e).attr("href"));
// });
//var title=$('head>title').text();//讀取Title信息
//console.log(title);
//分析得到頁(yè)面基本信息
var page = {
"document": {
title: $('head>title').text(),
meta: {
title: $('meta[property="og:title"]').attr("content"),
author: $('meta[property="og:author"]').attr("content"),
description: $('meta[name="description"]').attr("content"),
url: $('meta[property="og:url"]').attr("content"),
type: $('meta[property="og:type"]').attr("content"),
image: $('meta[property="og:image"]').attr("content")
},
"content": undefined,
"images": []
}
};
//采集圖片存入列表
$('img').each(function(){
var url = $(this).attr('src');
if (page.document.images.indexOf(url) === -1){
page.document.images.push(url);
}
});
console.log(page);
});
/**
* 下載源碼,自動(dòng)識(shí)別編碼
* @param {[type]} url [下載URL]
* @param {Function} callback [回調(diào)]
* @return {[type]} [description]
*/
function download(url, callback) {
http.get(url, function(res) {
var data = "";
res.on('data', function (chunk) {
data += chunk;
});
res.on("end", function() {
callback(data);
});
}).on("error", function(e) {
console.log("Got error: " + e.message);
callback(null);
});
}
上面我封好了download下載Html的內(nèi)容。并進(jìn)行處理的簡(jiǎn)單示例。注意require的庫(kù)必須使用npm link 庫(kù)名克隆到本地,或者自己下載包放到采集.js下面的node_modules目錄下面,如果 沒有這個(gè)目錄,自己創(chuàng)建。
其中:
使用Cheerio要取頁(yè)面的H1標(biāo)題就簡(jiǎn)單了
var title=$('#article_details h1 a').text().trim();//讀取Div下面的H1標(biāo)簽文本。
有沒有jQuery強(qiáng)到爆的感覺。想分析頁(yè)面什么的,還用正則嗎?不用了。還用分析嗎?不用了。找個(gè)大的Div,直接就讀出來(lái)了。C#當(dāng)然也可以用Htmp Agility pack來(lái)解析Dom。
但是為此我要新建一個(gè)項(xiàng)目,運(yùn)行,調(diào)試,用NodeJS的話,在Sublime里面按Ctrl+B直接運(yùn)行,可以馬上看到效果。而且可以放到服務(wù)端。放到我的服務(wù)器上去。諸多好處也不大好形容。如果會(huì)點(diǎn)JS代碼的話,上手應(yīng)該非常快。
下面是運(yùn)行效果
3
后面我把功能完善一點(diǎn)之后,會(huì)分享更完整的功能,讀取文件中的URL采集,采集內(nèi)容之后內(nèi)容清洗,放進(jìn)數(shù)據(jù)庫(kù)或者導(dǎo)出文件。
評(píng)論(0人參與,0條評(píng)論)
發(fā)布評(píng)論
最新評(píng)論