您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)nodejs中superagent和cheerio如何使用,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
準(zhǔn)備工作
使用npm管理依賴(lài),依賴(lài)信息會(huì)存放在package.json中
//安裝用到的第三方模塊 cnpm install --save superagent cheerio
引入所需要用到的功能模塊
//引入第三方模塊,superagent用于http請(qǐng)求,cheerio用于解析DOM const request = require('superagent'); const cheerio = require('cheerio'); const fs = require('fs');
請(qǐng)求 + 解析頁(yè)面
想要爬到博客園首頁(yè)的內(nèi)容,首先要請(qǐng)求首頁(yè)地址,拿到返回的html,這里使用superagent進(jìn)行http請(qǐng)求,基本的使用方法如下:
request.get(url) .end(error,res){ //do something }
向指定的url發(fā)起get請(qǐng)求,請(qǐng)求錯(cuò)誤時(shí),會(huì)有error返回(沒(méi)有錯(cuò)誤時(shí),error為null或undefined),res為返回的數(shù)據(jù)。
拿到html內(nèi)容后,要拿到我們想要的數(shù)據(jù),這個(gè)時(shí)候就需要用cheerio解析DOM了,cheerio要先load目標(biāo)html,然后再進(jìn)行解析,API和jquery的API非常類(lèi)似,熟悉jquery上手非???。直接看代碼實(shí)例
//目標(biāo)鏈接 博客園首頁(yè) let targetUrl = 'https://www.cnblogs.com/'; //用來(lái)暫時(shí)保存解析到的內(nèi)容和圖片地址數(shù)據(jù) let content = ''; let imgs = []; //發(fā)起請(qǐng)求 request.get(targetUrl) .end( (error,res) => { if(error){ //請(qǐng)求出錯(cuò),打印錯(cuò)誤,返回 console.log(error) return; } // cheerio需要先load html let $ = cheerio.load(res.text); //抓取需要的數(shù)據(jù),each為cheerio提供的方法用來(lái)遍歷 $('#post_list .post_item').each( (index,element) => { //分析所需要的數(shù)據(jù)的DOM結(jié)構(gòu) //通過(guò)選擇器定位到目標(biāo)元素,再獲取到數(shù)據(jù) let temp = { '標(biāo)題' : $(element).find('h4 a').text(), '作者' : $(element).find('.post_item_foot > a').text(), '閱讀數(shù)' : +$(element).find('.article_view a').text().slice(3,-2), '推薦數(shù)' : +$(element).find('.diggnum').text() } //拼接數(shù)據(jù) content += JSON.stringify(temp) + '\n'; //同樣的方式獲取圖片地址 if($(element).find('img.pfs').length > 0){ imgs.push($(element).find('img.pfs').attr('src')); } }); //存放數(shù)據(jù) mkdir('./content',saveContent); mkdir('./imgs',downloadImg); })
存儲(chǔ)數(shù)據(jù)
上面解析DOM之后,已經(jīng)拼接了所需要的信息內(nèi)容,也拿到了圖片的URL,現(xiàn)在就進(jìn)行存儲(chǔ),把內(nèi)容存放到指定目錄的txt文件中,而且下載圖片到指定目錄
先創(chuàng)建目錄,使用nodejs核心的文件系統(tǒng)
//創(chuàng)建目錄 function mkdir(_path,callback){ if(fs.existsSync(_path)){ console.log(`${_path}目錄已存在`) }else{ fs.mkdir(_path,(error)=>{ if(error){ return console.log(`創(chuàng)建${_path}目錄失敗`); } console.log(`創(chuàng)建${_path}目錄成功`) }) } callback(); //沒(méi)有生成指定目錄不會(huì)執(zhí)行 }
有了指定目錄之后,可以寫(xiě)入數(shù)據(jù)了,txt文件的內(nèi)容已經(jīng)有了,直接寫(xiě)入就可以了使用writeFile()
//將文字內(nèi)容存入txt文件中 function saveContent() { fs.writeFile('./content/content.txt',content.toString()); }
取到了圖片的鏈接,所以需要再使用superagent下載圖片,存在本地。superagent可以直接返回一個(gè)響應(yīng)流,再配合nodejs的管道,直接把圖片內(nèi)容寫(xiě)到本地
//下載爬到的圖片 function downloadImg() { imgs.forEach((imgUrl,index) => { //獲取圖片名 let imgName = imgUrl.split('/').pop(); //下載圖片存放到指定目錄 let stream = fs.createWriteStream(`./imgs/${imgName}`); let req = request.get('https:' + imgUrl); //響應(yīng)流 req.pipe(stream); console.log(`開(kāi)始下載圖片 https:${imgUrl} --> ./imgs/${imgName}`); } ) }
效果
執(zhí)行下demo,看下效果,數(shù)據(jù)已經(jīng)正常爬下來(lái)了
上述就是小編為大家分享的nodejs中superagent和cheerio如何使用了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。