node.js的強大就無需再去重複了,愈來愈多的公司在使用node.js,還有一點不得不提的優點就是node用的是javascript的語言,對於前端開發工程師來講,沒有理由不去get這一強大的技能。如今本人也是在學習階段,結合本身作的一些demo進行總結。今天給你們分享一下用node.js實現一個簡易的爬蟲,但願能和你們一塊兒交流探討。javascript
當在瀏覽器中訪問'http://localhost:3000'的時候,能夠以json的形式輸出慕課網首頁的 部分熱門課程(本人偶爾會去慕課網上看一些學習的視頻)html
步驟前端
1.新建一個文件夾,進去以後'npm init'(這個命令的做用就是幫咱們互動式地生成一份 最簡單的 package.json 文件,init
是 initialize
的意思,初始化。 )當一路回車而且填寫信息完畢後會出現一個package.json文件(首先須要在電腦上安裝node.js)。java
2.安裝相應的依賴,在此例子中,須要用到的有cheerio,express,superagent。其中 express 是 Node.js 應用最普遍的 web 框架,建議你們有時間能夠多去官網看看其API,因此如今開始安裝依賴,經過命令cnpm i cheerio express superagent -S完成依賴的安裝。安裝完成後效果以下圖:node
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