国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

nodejs爬蟲初試superagent和cheerio

2024-05-06 16:42:51
字體:
供稿:網(wǎng)友

前言

  早就聽過爬蟲,這幾天開始學習nodejs,寫了個爬蟲https://github.com/leichangchun/node-crawlers/tree/master/superagent_cheerio_demo,爬取 博客園首頁的文章標題、用戶名、閱讀數(shù)、推薦數(shù)和用戶頭像,現(xiàn)做個小總結。

  使用到這幾個點:

  1、node的核心模塊-- 文件系統(tǒng)

  2、用于http請求的第三方模塊 -- superagent

  3、用于解析DOM的第三方模塊 -- cheerio

  幾個模塊詳細的講解及API請到各個鏈接查閱,demo中只有簡單的用法。

準備工作

  使用npm管理依賴,依賴信息會存放在package.json中

//安裝用到的第三方模塊cnpm install --save superagent cheerio

  引入所需要用到的功能模塊

//引入第三方模塊,superagent用于http請求,cheerio用于解析DOMconst request = require('superagent');const cheerio = require('cheerio');const fs = require('fs');

請求 + 解析頁面

  想要爬到博客園首頁的內(nèi)容,首先要請求首頁地址,拿到返回的html,這里使用superagent進行http請求,基本的使用方法如下:

request.get(url)      .end(error,res){      //do something     }    

  向指定的url發(fā)起get請求,請求錯誤時,會有error返回(沒有錯誤時,error為null或undefined),res為返回的數(shù)據(jù)。

  拿到html內(nèi)容后,要拿到我們想要的數(shù)據(jù),這個時候就需要用cheerio解析DOM了,cheerio要先load目標html,然后再進行解析,API和jquery的API非常類似,熟悉jquery上手非常快。直接看代碼實例

//目標鏈接 博客園首頁let targetUrl = 'https://www.cnblogs.com/';//用來暫時保存解析到的內(nèi)容和圖片地址數(shù)據(jù)let content = '';let imgs = [];//發(fā)起請求request.get(targetUrl)    .end( (error,res) => {      if(error){ //請求出錯,打印錯誤,返回        console.log(error)        return;      }      // cheerio需要先load html      let $ = cheerio.load(res.text);      //抓取需要的數(shù)據(jù),each為cheerio提供的方法用來遍歷      $('#post_list .post_item').each( (index,element) => {        //分析所需要的數(shù)據(jù)的DOM結構        //通過選擇器定位到目標元素,再獲取到數(shù)據(jù)        let temp = {          '標題' : $(element).find('h3 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);    })

存儲數(shù)據(jù)

  上面解析DOM之后,已經(jīng)拼接了所需要的信息內(nèi)容,也拿到了圖片的URL,現(xiàn)在就進行存儲,把內(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(); //沒有生成指定目錄不會執(zhí)行}

  有了指定目錄之后,可以寫入數(shù)據(jù)了,txt文件的內(nèi)容已經(jīng)有了,直接寫入就可以了使用writeFile()

//將文字內(nèi)容存入txt文件中function saveContent() {  fs.writeFile('./content/content.txt',content.toString());}

  取到了圖片的鏈接,所以需要再使用superagent下載圖片,存在本地。superagent可以直接返回一個響應流,再配合nodejs的管道,直接把圖片內(nèi)容寫到本地

//下載爬到的圖片function downloadImg() {  imgs.forEach((imgUrl,index) => {    //獲取圖片名     let imgName = imgUrl.split('/').pop();    //下載圖片存放到指定目錄    let stream = fs.createWriteStream(`./imgs/${imgName}`);    let req = request.get('https:' + imgUrl); //響應流    req.pipe(stream);    console.log(`開始下載圖片 https:${imgUrl} --> ./imgs/${imgName}`);       } )}

效果  

  執(zhí)行下demo,看下效果,數(shù)據(jù)已經(jīng)正常爬下來了

nodejs,爬蟲,cheerio,superagent

   非常簡單的一個demo,可能也沒有那么嚴謹,不過總是走出了node的第一小步。

總結

以上所述是小編給大家介紹的nodejs爬蟲初試superagent和cheerio,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 遂宁市| 栾城县| 新竹县| 黑龙江省| 铁岭市| 绥江县| 衢州市| 新田县| 泰州市| 巢湖市| 新宁县| 德惠市| 神农架林区| 长岭县| 贵阳市| 锦州市| 南投县| 虹口区| 海安县| 晋江市| 石台县| 万荣县| 酒泉市| 信丰县| 兰坪| 翼城县| 利辛县| 邛崃市| 濮阳县| 五河县| 阿克苏市| 新野县| 正镶白旗| 龙山县| 射洪县| 新余市| 礼泉县| 德清县| 潍坊市| 德令哈市| 泰安市|