標籤:llb get cti 代碼 定義 顯示 media 如何 對象
本文轉載自:
如何用 Nodejs 分析一個簡單頁面----------韓子遲本文目的
在瀏覽器地址欄中輸入 localhost:3000
,在頁面顯示 部落格園首頁 的 20 篇文章標題。
過程分析
首先需要連接埠的監聽,這就需要引入 Node 中最重要的模組之一 express
。其次需要對 http://www.cnblogs.com/ 頁面發送類似 http 的請求以擷取頁面資料進行分析,這裡需要引入 SuperAgent
模組。最後為了能使請求得到的 html 源碼進行類似 dom 一般的操作,需要引入 cheerio
模組。
express 模組
首先第一步,我們要實現連接埠的監聽,以便能將資訊輸出到頁面上。
我們可以用 http
模組:
複製代碼var http = require("http");http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/html"}); response.write("Hello World!"); response.end();}).listen(3000);
當然我們更可以用封裝了 http
功能更加強大的 express 模組:
複製代碼// 這句的意思就是引入 `express` 模組,並將它賦予 `express` 這個變數等待使用。var express = require(‘express‘);// 調用 express 執行個體,它是一個函數,不帶參數調用時,會返回一個 express 執行個體,將這個變數賦予 app 變數。var app = express();// app 本身有很多方法,其中包括最常用的 get、post、put/patch、delete,在這裡我們調用其中的 get 方法,為我們的 `/` 路徑指定一個 handler 函數。// 這個 handler 函數會接收 req 和 res 兩個對象,他們分別是請求的 request 和 response。// request 中包含了瀏覽器傳來的各種資訊,比如 query 啊,body 啊,headers 啊之類的,都可以通過 req 對象訪問到。// res 對象,我們一般不從裡面取資訊,而是通過它來定製我們向瀏覽器輸出的資訊,比如 header 資訊,比如想要向瀏覽器輸出的內容。這裡我們調用了它的 #send 方法,向瀏覽器輸出一個字串。app.get(‘/‘, function (req, res) { res.send(‘Hello World‘);});// 定義好我們 app 的行為之後,讓它監聽本地的 3000 連接埠。這裡的第二個函數是個回呼函數,會在 listen 動作成功後執行,我們這裡執行了一個命令列輸出操作,告訴我們監聽動作已完成。app.listen(3000, function () { console.log(‘app is listening at port 3000‘);});
SuperAgent 模組
接著我們需要擷取部落格園首頁的代碼從而能進行分析。SuperAgent 就是服務端可以發送 get post 等 http 請求的模組,直接看代碼,更多的 api 可以參考文檔。
複製代碼var express = require(‘express‘);var superagent = require(‘superagent‘);var app = express();app.get(‘/‘, function (req, res, next) { superagent .get(‘http://www.cnblogs.com/‘) .end(function (err, ans) { // 常規的錯誤處理 if (err) { return next(err); } res.send(ans.text); });});app.listen(3000, function () { console.log(‘app is listening at port 3000‘);});
cheerio 模組
我們用 SuperAgent 模組擷取了部落格園的頁面代碼,而用 cheerio 則可以進行類似 Jquery 的 css 選取器操作。cheerio 模組的詳細 api 可以參考 文檔。
完整代碼
複製代碼var express = require(‘express‘);var cheerio = require(‘cheerio‘);var superagent = require(‘superagent‘);var app = express();app.get(‘/‘, function (req, res, next) { superagent .get(‘http://www.cnblogs.com/‘) .end(function (err, sres) { // callback // 常規的錯誤處理 if (err) { return next(err); } // sres.text 裡面儲存著網頁的 html 內容,將它傳給 cheerio.load 之後 // 就可以得到一個實現了 jquery 介面的變數,我們習慣性地將它命名為 `$` // 剩下就都是 jquery 的內容了 var $ = cheerio.load(sres.text); var ans = ‘‘; $(‘.titlelnk‘).each(function (index, item) { var $item = $(item); ans += $item.html() + ‘<br/><br/>‘; }); // 將內容呈現到頁面 res.send(ans); });});app.listen(3000, function () { console.log(‘app is listening at port 3000‘);});
這時啟動 localhost:3000
,頁面就能顯示部落格園首頁的 20 篇文章標題啦(雖然沒樣式不太美觀)!(當然得先 node fileName.js)
當然我們也可以直接把內容輸出在控制台:
複製代碼var cheerio = require(‘cheerio‘);var superagent = require(‘superagent‘);superagent .get(‘http://www.cnblogs.com/‘) .end(function (err, sres) { // callback // 常規的錯誤處理 if (err) { console.error(err); } // sres.text 裡面儲存著網頁的 html 內容,將它傳給 cheerio.load 之後 // 就可以得到一個實現了 jquery 介面的變數,我們習慣性地將它命名為 `$` // 剩下就都是 jquery 的內容了 var $ = cheerio.load(sres.text); $(‘.titlelnk‘).each(function (index, item) { var $item = $(item); console.log($item.text()); }); });
參考:《Node.js 包教不包會》
本文轉載自:
如何用 Nodejs 分析一個簡單頁面----------韓子遲
nodejs爬蟲基礎(一)