NodeJS爬蟲入門

2022-07-04 16:42:11 字數 3548 閱讀 9218

往常都是利用 python/.net 語言實現爬蟲,然現在作為一名前端開發人員,自然需要熟練 nodejs。下面利用 nodejs 語言實現乙個糗事百科的爬蟲。另外,本文使用的部分**是 es6 語法。

實現該爬蟲所需要的依賴庫如下。

request: 利用 get 或者 post 等方法獲取網頁的原始碼。

cheerio: 對網頁原始碼進行解析,獲取所需資料。

本文首先對爬蟲所需依賴庫及其使用進行介紹,然後利用這些依賴庫,實現乙個針對糗事百科的網路爬蟲。

request 是乙個輕量級的 http 庫,功能十分強大且使用簡單。可以使用它實現 http 的請求,並且支援 http 認證, 自定請求頭等。下面對 request 庫中一部分功能進行介紹。

安裝 request 模組如下:

npm install request
const req = require('request');

req('', (error, response, body) =>

})

在沒有設定 options 引數時,request 方法預設是 get 請求。而我喜歡利用 request 物件的具體方法,使用如下:

req.get(,(err, res, body) => 

});

然而很多時候,直接去請求乙個**所獲取的 html 原始碼,往往得不到我們需要的資訊。一般情況下,需要考慮到請求頭和網頁編碼。

網頁的請求頭

網頁的編碼

下面介紹在請求的時候如何新增網頁請求頭以及設定正確的編碼。

req.get(,

encoding : 'utf-8'

}, (err, res, body)=>)

設定 options 引數, 新增headers屬性即可實現請求頭的設定;新增encoding屬性即可設定網頁的編碼。需要注意的是,若encoding:null,那麼 get 請求所獲取的內容則是乙個buffer物件,即 body 是乙個 buffer 物件。

上面介紹的功能足矣滿足後面的所需了,更多功能請參看官網的文件 request

cheerio 是一款伺服器端的 jquery,以輕、快、簡單易學等特點被開發者喜愛。有 jquery 的基礎後再來學習 cheerio 庫非常輕鬆。它能夠快速定位到網頁中的元素,其規則和 jquery 定位元素的方法是一樣的;它也能以一種非常方便的形式修改 html 中的元素內容,以及獲取它們的資料。下面主要針對 cheerio 快速定位網頁中的元素,以及獲取它們的內容進行介紹。

首先安裝 cheerio 庫

npm install cheerio
下面先給出一段**,再對**進行解釋 cheerio 庫的用法。對首頁進行分析,然後提取每一頁中文章的標題。

首先對首頁進行分析。如下圖:

對 html 源**進行分析後,首先通過.post_item獲取所有標題,接著對每乙個.post_item進行分析,使用a.titlelnk即可匹配每個標題的 a 標籤。下面通過**進行實現。

const req = require('request');

const cheerio = require('cheerio');

req.get(, (err, res, body) => );

}});

當然,cheerio 庫也支援鏈式呼叫,上面的**也可改寫成:

let cnbloghtmlstr = body;

let $ = cheerio.load(cnbloghtmlstr);

let titles = $('.post_item').find('a.titlelnk');

titles.each((index, ele) => ,

encoding : 'utf-8'

}, (err, res, body)=>)

});}exports.gethtml = gethtml;

2、在專案目錄中,新建乙個splider.js檔案,分析糗事百科的網頁**,提取自己需要的資訊,並且建立乙個邏輯通過更改 url 的 id 來爬取不同頁面的資料。

在獲取糗事百科網頁資訊的時候,首先在瀏覽器中對原始碼進行分析,定位到自己所需要標籤,然後提取標籤的文字或者屬性值,這樣就完成了網頁的解析。

splider.js檔案入口是splider方法,首先根據傳入該方法的 index 索引,構造糗事百科的 url,接著獲取該 url 的網頁原始碼,最後將獲取的原始碼傳入getqbjok方法,進行解析,本文只解析每條文本笑話的作者、內容以及喜歡個數。

直接執行splider.js檔案,即可爬取第一頁的笑話資訊。然後可以更改splider方法的引數,實現抓取不同頁面的資訊。

在上面已有**的基礎上,使用koavue2.0搭建乙個瀏覽文字的頁面,效果如下:

專案執行依賴node v7.6.0以上, 首先從 github 上面轉殖整個專案。

git clone
轉殖之後,進入專案目錄,執行下面命令即可。

通過實現乙個完整的爬蟲功能,加深自己對node的理解,且實現的部分語言都是使用es6的語法,讓自己加快對es6語法的學習進度。另外,在這次實現中,遇到了node的非同步控制的知識,本文是採用的是asyncawait關鍵字,也是我最喜歡的一種,然而在node中,實現非同步控制有好幾種方式。關於具體的方式以及原理,有時間再進行總結。

爬蟲工具可以幹什麼 nodejs爬蟲入門

weixin public space fullstackengineer 本篇從零介紹一下爬蟲,使用的技術以nodejs為基礎。爬蟲是什麼?實現爬蟲的工具 能發起http請求的工具,在nodejs中你可以選擇http模組的request方法或者get方法,或者使用第三方包superagent網頁解...

nodejs簡易爬蟲

我的爬蟲程式是用nodejs寫的,因為最近在學這個東西,其中使用了express框架,以及cheerio和superagent兩個模組。cheerio模組是nodejs處理html內容的神器,例如var cheerio.load html 將頁面的html內容載入下來後,便可使用jquery語法進行...

網路爬蟲 Nodejs

要抓取網頁資訊首先要獲取部落格主頁的html資訊,使用 http.get options callback 方法獲取資訊,如下 其中url 為我的 部落格主頁,獲取主頁html後,需要對資訊進行挑選,在部落格主頁右鍵選擇檢視原始碼,可以找到所需資訊如下 newcomments class panel...