運用node實現簡單爬蟲

node.js的強大就無需再去重複了,愈來愈多的公司在使用node.js,還有一點不得不提的優點就是node用的是javascript的語言,對於前端開發工程師來講,沒有理由不去get這一強大的技能。如今本人也是在學習階段,結合本身作的一些demo進行總結。今天給你們分享一下用node.js實現一個簡易的爬蟲,但願能和你們一塊兒交流探討。javascript

目標:

當在瀏覽器中訪問'http://localhost:3000'的時候,能夠以json的形式輸出慕課網首頁的 部分熱門課程(本人偶爾會去慕課網上看一些學習的視頻)html

步驟前端

1.新建一個文件夾,進去以後'npm init'(這個命令的做用就是幫咱們互動式地生成一份 最簡單的 package.json 文件,initinitialize 的意思,初始化。 )當一路回車而且填寫信息完畢後會出現一個package.json文件(首先須要在電腦上安裝node.js)。java

2.安裝相應的依賴,在此例子中,須要用到的有cheerio,express,superagent。其中 express 是 Node.js 應用最普遍的 web 框架,建議你們有時間能夠多去官網看看其API,因此如今開始安裝依賴,經過命令cnpm i cheerio express superagent -S完成依賴的安裝。安裝完成後效果以下圖:node

此時就完成了依賴的安裝,在package.json中的dependencies目錄下會有剛剛安裝的三個依賴

3.如今在文件夾裏建一個js文件,好比取名爲index.js,接下來就是在裏面寫代碼,話很少說,直接上代碼,在代碼中也作了較爲詳細的註釋。jquery

//引入模塊
var express = require('express');
var cheerio = require('cheerio');
var superagent = require('superagent');
// 調用 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, next) {
  superagent.get('https://www.imooc.com/')
    .end(function (err, sres) {
      if (err) {
        return next(err);
      }
      // sres.text 裏面存儲着網頁的 html 內容,將它傳給 cheerio.load 以後
      // 就能夠獲得一個實現了 jquery 接口的變量,咱們習慣性地將它命名爲 `$`
      // 剩下就都是 jquery 的內容了
      var $ = cheerio.load(sres.text);
      var items = [];
      $('.banner-course-card .clearfix').each(function (idx, element) {
        var $element = $(element);
        items.push({
          title: $element.attr('title'),
          href: $element.attr('href')
        });
      });

      res.send(items);
      // 定義好咱們 app 的行爲以後,讓它監聽本地的 3000 端口。這裏的第二個函數是個回調函數,
      //會在 listen 動做成功後執行,咱們這裏執行了一個命令行輸出操做,告訴咱們監聽動做已完成。
    });
});


app.listen(3000, function () {
  console.log('app is listening at port 3000');
});
複製代碼

代碼解釋:

經過請求獲得網頁的html內容並儲存於sres.text中,再傳給cheerio.load,獲得一個實現jquery接口的變量,而後就相似於jquery選擇器的方法對頁面的元素的查找,拿到本身想要的數據便可。在定義好行爲以後,讓它監聽本地的 3000 端口。這裏的第二個函數是個回調函數,會在 listen 動做成功後執行,咱們這裏執行了一個命令行輸出操做,告訴咱們監聽動做已完成。web

運行:

輸入命令 ' node index.js ' , 會看到打印出'app is listening at port 3000 ',如圖所示: express

打開瀏覽器,訪問'http://localhost:3000/',就能夠看到咱們爬蟲得來的數據哦,以下圖所示:npm

只是用了最基本的node實現了一個簡易的爬蟲效果,固然在這個例子中並無利用到node.js的異步併發特性,待深刻研究再作分享,但願和你們多多交流探討。json

相關文章
相關標籤/搜索