觸屏版
全國服務(wù)熱線:0571-87205688
登錄
注冊
客戶中心
關(guān)注云客
NodeJS是最近非?;鸬囊粋€JS框架,百科的介紹是輕量高效的基于事件驅(qū)動的JS運行平臺。
使用NodeJS的原因有3個,一是它的代碼寫法基于JS,比較容易寫。已經(jīng)有入門級別的經(jīng)驗了。另一個就是它的一個庫Cheerio,可以用幾乎和jQuery一模一樣的方式來操作源碼里面的Dom元素。這個什么意思稍候會講。第三個是它可以做為本地端,也可以布到服務(wù)器上去。
這2天研究比較多,應(yīng)該算是初級入門了。正好有個需求要處理,于是應(yīng)用了NodeJS。
一、安裝
網(wǎng)上有很多的教程,下載到https://nodejs.org,在Win系統(tǒng)下運行就可以搭上一個環(huán)境。下載Windows的Installer版本,雙擊安裝,就成功了。
然后配置神器Sublime開始使用。
為Sublime添加實時調(diào)試運行,打開Sublime-》Tools-》Build System-》New Build System
在新打開的文件中寫入下面的代碼
{
"cmd": ["node", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.javascript"
}
然后保存為NodeJS.sublime-build.
新建一個采集.js文件,設(shè)為NodeJS進(jìn)行運行調(diào)試。
1
二、注意
在nodejs里面需要require(庫名)的方式來引用一些外部的庫,這些外部的庫安裝NodeJS的時候,已經(jīng)放在C盤的programfiles下面了。但是直接require是無效的。
因為NodeJS提倡的是自己的代碼用自己的庫,所以還需要把庫復(fù)制到采集.js這個文件下面。
引用的時候可以通過npm link 庫名的方式,來把系統(tǒng)C盤的庫引用到我們的項目下面。
2
三、直接使用了
//采集頁面內(nèi)容到本地
var http = require("http");
var cheerio = require('cheerio'); //引用cheerio模塊,使在服務(wù)器端像在客戶端上操作DOM,不用正則表達(dá)式,據(jù)基準(zhǔn)測試: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);
//分析得到頁面基本信息
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);
});
/**
* 下載源碼,自動識別編碼
* @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)行處理的簡單示例。注意require的庫必須使用npm link 庫名克隆到本地,或者自己下載包放到采集.js下面的node_modules目錄下面,如果 沒有這個目錄,自己創(chuàng)建。
其中:
使用Cheerio要取頁面的H1標(biāo)題就簡單了
var title=$('#article_details h1 a').text().trim();//讀取Div下面的H1標(biāo)簽文本。
有沒有jQuery強到爆的感覺。想分析頁面什么的,還用正則嗎?不用了。還用分析嗎?不用了。找個大的Div,直接就讀出來了。C#當(dāng)然也可以用Htmp Agility pack來解析Dom。
但是為此我要新建一個項目,運行,調(diào)試,用NodeJS的話,在Sublime里面按Ctrl+B直接運行,可以馬上看到效果。而且可以放到服務(wù)端。放到我的服務(wù)器上去。諸多好處也不大好形容。如果會點JS代碼的話,上手應(yīng)該非??臁?/p>
下面是運行效果
3
后面我把功能完善一點之后,會分享更完整的功能,讀取文件中的URL采集,采集內(nèi)容之后內(nèi)容清洗,放進(jìn)數(shù)據(jù)庫或者導(dǎo)出文件。
評論(0人參與,0條評論)
發(fā)布評論
最新評論