狠狠网/色综合久久久久综合体桃花网/日本护士三aaaaaa/久久久久久综合一区中文字幕

或者

NodeJS在SEO中的應用

作者:聚擎 瀏覽:163 發布時間:2017-10-28
分享 評論 0

 NodeJS是最近非常火的一個JS框架,百科的介紹是輕量高效的基于事件驅動的JS運行平臺。

 

  使用NodeJS的原因有3個,一是它的代碼寫法基于JS,比較容易寫。已經有入門級別的經驗了。另一個就是它的一個庫Cheerio,可以用幾乎和jQuery一模一樣的方式來操作源碼里面的Dom元素。這個什么意思稍候會講。第三個是它可以做為本地端,也可以布到服務器上去。

 

  這2天研究比較多,應該算是初級入門了。正好有個需求要處理,于是應用了NodeJS。

 

  一、安裝

 

  網上有很多的教程,下載到https://nodejs.org,在Win系統下運行就可以搭上一個環境。下載Windows的Installer版本,雙擊安裝,就成功了。

 

  然后配置神器Sublime開始使用。

 

  為Sublime添加實時調試運行,打開Sublime-》Tools-》Build System-》New Build System

 

  在新打開的文件中寫入下面的代碼

  {

  "cmd": ["node", "$file"],

  "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",

  "selector": "source.javascript"

  }

  然后保存為NodeJS.sublime-build.

 

  新建一個采集.js文件,設為NodeJS進行運行調試。

  

1

  二、注意

 

  在nodejs里面需要require(庫名)的方式來引用一些外部的庫,這些外部的庫安裝NodeJS的時候,已經放在C盤的programfiles下面了。但是直接require是無效的。

 

  因為NodeJS提倡的是自己的代碼用自己的庫,所以還需要把庫復制到采集.js這個文件下面。

 

  引用的時候可以通過npm link 庫名的方式,來把系統C盤的庫引用到我們的項目下面。

  

2

  三、直接使用了

 

  //采集頁面內容到本地

  var http = require("http");

  var cheerio = require('cheerio'); //引用cheerio模塊,使在服務器端像在客戶端上操作DOM,不用正則表達式,據基準測試:cheerio大約比JsDom快8倍。

  var iconv = require('iconv-lite'); //解決編碼轉換模塊

  var BufferHelper = require('bufferhelper'); //關于Buffer我后面細說

  var data=download('http://blog.csdn.net/kissliux/article/details/20466889',function (data) {

  //console.log(data);

  var $=cheerio.load(data);//載入到cheerio進行分析

  //遍歷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 [回調]

  * @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的內容。并進行處理的簡單示例。注意require的庫必須使用npm link 庫名克隆到本地,或者自己下載包放到采集.js下面的node_modules目錄下面,如果 沒有這個目錄,自己創建。

 

  其中:

 

  使用Cheerio要取頁面的H1標題就簡單了

 

  var title=$('#article_details h1 a').text().trim();//讀取Div下面的H1標簽文本。

 

  有沒有jQuery強到爆的感覺。想分析頁面什么的,還用正則嗎?不用了。還用分析嗎?不用了。找個大的Div,直接就讀出來了。C#當然也可以用Htmp Agility pack來解析Dom。

 

  但是為此我要新建一個項目,運行,調試,用NodeJS的話,在Sublime里面按Ctrl+B直接運行,可以馬上看到效果。而且可以放到服務端。放到我的服務器上去。諸多好處也不大好形容。如果會點JS代碼的話,上手應該非常快。

 

  下面是運行效果

  

3

  后面我把功能完善一點之后,會分享更完整的功能,讀取文件中的URL采集,采集內容之后內容清洗,放進數據庫或者導出文件。