說(shuō)到爬蟲(chóng)其實(shí)并沒(méi)有想象中那么復(fù)雜,原理就是向目標(biāo)URL發(fā)送請(qǐng)求然后把響應(yīng)解析成我們想要的數(shù)據(jù)格式,如果涉及Token鑒權(quán)則比較復(fù)雜一點(diǎn),本次只講解最簡(jiǎn)單的入門(mén)靜態(tài)爬蟲(chóng)。
node.js中實(shí)現(xiàn)爬蟲(chóng)推薦兩個(gè)庫(kù),和
npm install request
npm install cheerio
用來(lái)發(fā)送請(qǐng)求;則是核心功能的快速簡(jiǎn)潔靈活的實(shí)現(xiàn),可以直接對(duì)請(qǐng)求返回的頁(yè)面html進(jìn)行式的dom操作。
(一)dom爬取
下面給一個(gè)最簡(jiǎn)單的爬蟲(chóng)例子,我們爬取簡(jiǎn)書(shū)我的主頁(yè)的用戶名
打開(kāi)要爬取的頁(yè)面并要找到用戶名的dom節(jié)點(diǎn)
按照的選擇器寫(xiě)法獲取,這里應(yīng)該是$('.main-top>.title>a').text()
附上代碼
const request = require('request')
const cheerio = require('cheerio')
request('https://www.jianshu.com/u/5b23cf5114a1', (err, res) => {

if (err) {
console.log(err.code)
}
else {
let $ = cheerio.load(res.body)
console.log($('.main-top>.title>a').text())
}
})
(二)列表爬取
如果要爬取一個(gè)列表靜態(tài)網(wǎng)頁(yè)的爬取思路,例如我的簡(jiǎn)書(shū)B(niǎo)log列表,那該怎么實(shí)現(xiàn)呢,同理,使用的each方法靜態(tài)網(wǎng)頁(yè)的爬取思路,該方法會(huì)對(duì)選擇器內(nèi)的匹配dom進(jìn)行遍歷。按照同樣的步驟先找到dom節(jié)點(diǎn)再進(jìn)行解析。
附上參考代碼
const request = require('request')
const cheerio = require('cheerio')

request('https://www.jianshu.com/u/5b23cf5114a1', (err, res) => {
if (err) {
console.log(err.code)
}
else {
let $ = cheerio.load(res.body)
let data = []
$('.note-list>li').each(function (i) {
data.push($(this).find('.title').text());
});
console.log(data)
}
})
靜態(tài)爬蟲(chóng)到此結(jié)束了,后面還會(huì)講解動(dòng)態(tài)網(wǎng)頁(yè)的爬取。