NodeJs(二) 跟我一起爬取一下Boss直聘前端程師的薪資情況

歡迎來到我的NodeJs專題系列,更多精彩內容持續更新中,敬請關注!

NodeJs(二) 跟我一起爬取一下Boss直聘前端程師的薪資情況

現在基本上很多教程教大家Node入門一般都是通過http模塊去創建一個簡單的服務器,然後可以通過瀏覽器去訪問。

看的多了,沒多大意思,那麼今天我來給大家分享一下如何用Node寫一個簡單的爬蟲吧。

爬蟲是什麼?

在做爬蟲之前,我們首先得弄清楚什麼是爬蟲,爬蟲的原理是什麼?

爬蟲就是我們可以通過程序去訪問別人的網站的源代碼,並對其進行分析數據過濾,清洗。最後存儲到我們自己的數據庫中。

由於NodeJs是運行在服務器端,將不會像運行在瀏覽器端那樣請求別的網站的時候會有跨域的問題。所以我們可以通過NodeJs去獲取到別的網站頁面的源代碼。

在所有的後端語言中,最快捷方便的爬蟲應該是python了。提供了非常多的優秀的爬蟲框架!

Node中的內置模塊

我們要想通過Node獲取頁面的源代碼,我們需要用到的模塊是http 或者 https,兩個模塊下提供的方法都一樣,只是協議不一樣。

NodeJs(二) 跟我一起爬取一下Boss直聘前端程師的薪資情況

可以看到Boss直聘是基於https的

所以我們需要用到https模塊

const https = require("https")

這時候, 我們可以通過https.get方法去獲取一個url的源代碼了。

NodeJs(二) 跟我一起爬取一下Boss直聘前端程師的薪資情況

第二個參數是一個回調函數,它裡面包含了這個響應所有的信息。其中,我們可以通過on去監聽data方法去不斷的讀取獲取到的數據。

我們來看下效果:

NodeJs(二) 跟我一起爬取一下Boss直聘前端程師的薪資情況

額。好像出問題了,這和我們的預期好像不太一樣啊,

NodeJs(二) 跟我一起爬取一下Boss直聘前端程師的薪資情況

再給我次機會吧。我查了資料,這和https這個模塊有關係。我們需要設置對應的請求頭信息,什麼意思呢?就是我們要將這個爬蟲偽裝成一個瀏覽器。

所以這時候,我們需要將get的參數設置成一個對象的形式。具體的配置如下:

NodeJs(二) 跟我一起爬取一下Boss直聘前端程師的薪資情況

設置好請求頭後。接下來我們可以愉快的玩耍了吧~再來跑一次。

NodeJs(二) 跟我一起爬取一下Boss直聘前端程師的薪資情況

呀,好像有效果了。但是…………這都返回了啥啊,看不懂的樣子。

返回了一堆的buffer

Buffer

buffer在Nodejs中是一種很重要的數據結構,它和我們平時使用的數組非常類似,但是功能更為強大。

那可能大家有疑問,為什麼不直接給我返回一個字符串呢?返回一我看不懂的buffer幹嘛 ?

要知道,我們的數組只能存儲js中的基本數據類型。無法儲存圖片,文件等數據,這些數據都是二進制的,剛好buffer可以完美解決這個問題。所以一般來說,NodeJs中都會返回buffer類型的數據

那如果將beffer轉成字符串呢?也很簡單,我們將結果toString一下即可。

接下來我們將獲取到的結果儲存寫入一個文件中去。

NodeJs(二) 跟我一起爬取一下Boss直聘前端程師的薪資情況

獲取到了源代碼後。我們需要從中獲取我們想要的信息。這時候問題來了。我們通過https獲取過來的是串字符串,該怎麼過濾我們想要的信息呢?

這時候不得不提到大名鼎鼎的cheerio了。

cheerio

cheerio可以加載一段Html字符串,然後可以通過jQuery的方式去操作它。

首先cheerio是一個第三方的庫。所以我們需要手動安裝它

npm i cheerio

基本用法:

NodeJs(二) 跟我一起爬取一下Boss直聘前端程師的薪資情況

我們直接來看下結果

NodeJs(二) 跟我一起爬取一下Boss直聘前端程師的薪資情況

恩,薪資還是蠻可觀的哈^_^

我們可以看到,頁面中的職位和薪資都已被我爬取出來啦。可用的數據有很多,大家可以根據自己的需要將對應的數據存儲到自己的數據庫中去。

好啦,一個小小的爬蟲就做好了。

總結:

  1. Nodejs中的內置模塊fs https url 等的基本使用。
  2. Nodejs返回的結果一般都是基於buffer,它類似於數組,但功能更強大
  3. 第三方庫cheerio可以讓我們使用jquery的api來操作字符串。

這裡是【暢哥聊技術】的《NodeJs》專題系列。更多內容持續更新中。

下期我們接著聊,未完待續。。


分享到:


相關文章: