歡迎來到我的NodeJs專題系列,更多精彩內容持續更新中,敬請關注!
現在基本上很多教程教大家Node入門一般都是通過http模塊去創建一個簡單的服務器,然後可以通過瀏覽器去訪問。
看的多了,沒多大意思,那麼今天我來給大家分享一下如何用Node寫一個簡單的爬蟲吧。
爬蟲是什麼?
在做爬蟲之前,我們首先得弄清楚什麼是爬蟲,爬蟲的原理是什麼?
爬蟲就是我們可以通過程序去訪問別人的網站的源代碼,並對其進行分析數據過濾,清洗。最後存儲到我們自己的數據庫中。
由於NodeJs是運行在服務器端,將不會像運行在瀏覽器端那樣請求別的網站的時候會有跨域的問題。所以我們可以通過NodeJs去獲取到別的網站頁面的源代碼。
在所有的後端語言中,最快捷方便的爬蟲應該是python了。提供了非常多的優秀的爬蟲框架!
Node中的內置模塊
我們要想通過Node獲取頁面的源代碼,我們需要用到的模塊是http 或者 https,兩個模塊下提供的方法都一樣,只是協議不一樣。
所以我們需要用到https模塊
const https = require("https")
這時候, 我們可以通過https.get方法去獲取一個url的源代碼了。
第二個參數是一個回調函數,它裡面包含了這個響應所有的信息。其中,我們可以通過on去監聽data方法去不斷的讀取獲取到的數據。
我們來看下效果:
額。好像出問題了,這和我們的預期好像不太一樣啊,
再給我次機會吧。我查了資料,這和https這個模塊有關係。我們需要設置對應的請求頭信息,什麼意思呢?就是我們要將這個爬蟲偽裝成一個瀏覽器。
所以這時候,我們需要將get的參數設置成一個對象的形式。具體的配置如下:
設置好請求頭後。接下來我們可以愉快的玩耍了吧~再來跑一次。
呀,好像有效果了。但是…………這都返回了啥啊,看不懂的樣子。
返回了一堆的buffer
Buffer
buffer在Nodejs中是一種很重要的數據結構,它和我們平時使用的數組非常類似,但是功能更為強大。
那可能大家有疑問,為什麼不直接給我返回一個字符串呢?返回一我看不懂的buffer幹嘛 ?
要知道,我們的數組只能存儲js中的基本數據類型。無法儲存圖片,文件等數據,這些數據都是二進制的,剛好buffer可以完美解決這個問題。所以一般來說,NodeJs中都會返回buffer類型的數據
那如果將beffer轉成字符串呢?也很簡單,我們將結果toString一下即可。
接下來我們將獲取到的結果儲存寫入一個文件中去。
獲取到了源代碼後。我們需要從中獲取我們想要的信息。這時候問題來了。我們通過https獲取過來的是串字符串,該怎麼過濾我們想要的信息呢?
這時候不得不提到大名鼎鼎的cheerio了。
cheerio
cheerio可以加載一段Html字符串,然後可以通過jQuery的方式去操作它。
首先cheerio是一個第三方的庫。所以我們需要手動安裝它
npm i cheerio
基本用法:
我們直接來看下結果
我們可以看到,頁面中的職位和薪資都已被我爬取出來啦。可用的數據有很多,大家可以根據自己的需要將對應的數據存儲到自己的數據庫中去。
好啦,一個小小的爬蟲就做好了。
總結:
- Nodejs中的內置模塊fs https url 等的基本使用。
- Nodejs返回的結果一般都是基於buffer,它類似於數組,但功能更強大
- 第三方庫cheerio可以讓我們使用jquery的api來操作字符串。
這裡是【暢哥聊技術】的《NodeJs》專題系列。更多內容持續更新中。
下期我們接著聊,未完待續。。
閱讀更多 暢哥聊技術 的文章