nodejs爬蟲基礎(一)

來源:互聯網
上載者:User

標籤: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爬蟲基礎(一)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.