往常都是利用 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
方法的引數,實現抓取不同頁面的資訊。
在上面已有**的基礎上,使用koa
和vue2.0
搭建乙個瀏覽文字的頁面,效果如下:
專案執行依賴node v7.6.0
以上, 首先從 github 上面轉殖整個專案。
git clone
轉殖之後,進入專案目錄,執行下面命令即可。
通過實現乙個完整的爬蟲功能,加深自己對node
的理解,且實現的部分語言都是使用es6
的語法,讓自己加快對es6
語法的學習進度。另外,在這次實現中,遇到了node
的非同步控制的知識,本文是採用的是async
和await
關鍵字,也是我最喜歡的一種,然而在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...