最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nodejs爬蟲初試superagent和cheerio

 更新時間:2018年03月05日 09:26:17   作者:Shapeying  
這篇文章主要介紹了nodejs爬蟲初試superagent和cheerio的相關(guān)知識,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下

前言

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

  使用到這幾個點(diǎn):

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

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

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

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

準(zhǔn)備工作

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

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

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

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

請求 + 解析頁面

  想要爬到博客園首頁的內(nèi)容,首先要請求首頁地址,拿到返回的html,這里使用superagent進(jìn)行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目標(biāo)html,然后再進(jìn)行解析,API和jquery的API非常類似,熟悉jquery上手非???。直接看代碼實(shí)例

//目標(biāo)鏈接 博客園首頁
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結(jié)構(gòu)
        //通過選擇器定位到目標(biāo)元素,再獲取到數(shù)據(jù)
        let temp = {
          '標(biāo)題' : $(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)在就進(jì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可以直接返回一個響應(yīng)流,再配合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); //響應(yīng)流
    req.pipe(stream);
    console.log(`開始下載圖片 https:${imgUrl} --> ./imgs/${imgName}`);     
  } )
}

效果  

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

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

總結(jié)

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

相關(guān)文章

  • node.js增刪改查保姆級教程方法

    node.js增刪改查保姆級教程方法

    這篇文章主要給大家介紹了關(guān)于node.js增刪改查保姆級教程的相關(guān)資料,node.js接口可以實(shí)現(xiàn)增加、刪除、修改和查詢操作,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • node.js中的fs.rmdirSync方法使用說明

    node.js中的fs.rmdirSync方法使用說明

    這篇文章主要介紹了node.js中的fs.rmdirSync方法使用說明,本文介紹了fs.rmdirSync方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 詳解一個基于套接字實(shí)現(xiàn)長連接的express

    詳解一個基于套接字實(shí)現(xiàn)長連接的express

    這篇文章主要介紹了詳解一個基于套接字實(shí)現(xiàn)長連接的express,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Node.js安裝教程和NPM包管理器使用詳解

    Node.js安裝教程和NPM包管理器使用詳解

    這篇文章主要介紹了Node.js安裝教程和NPM包管理器使用詳解,安裝部分講解了Windows、和MAC OS下的安裝圖解,并介紹了Linux下的源碼安裝方法,最后對NPM包管理器做了詳細(xì)介紹,需要的朋友可以參考下
    2014-08-08
  • 基于Koa(nodejs框架)對json文件進(jìn)行增刪改查的示例代碼

    基于Koa(nodejs框架)對json文件進(jìn)行增刪改查的示例代碼

    這篇文章主要介紹了基于Koa(nodejs框架)對json文件進(jìn)行增刪改查的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 在?node?中使用?koa-multer?庫上傳文件的方式詳解

    在?node?中使用?koa-multer?庫上傳文件的方式詳解

    本文主要介紹了上傳單個文件、多個文件,文件數(shù)量大小限制、限制文件上傳類型和對上傳的圖片進(jìn)行不同大小的裁剪,對node使用?koa-multer?庫上傳文件相關(guān)知識感興趣的朋友一起看看吧
    2024-01-01
  • 教你快速搭建Node.Js服務(wù)器的方法教程

    教你快速搭建Node.Js服務(wù)器的方法教程

    Node.js是一套用來編寫高性能網(wǎng)絡(luò)服務(wù)器的JavaScript工具包,一系列的變化由此開始。這篇文章主要給大家介紹了如何快速搭建Node.Js服務(wù)器的方法教程,文中介紹的非常詳細(xì),對大家具有一定的參考價(jià)值,需要的朋友下面來一起看看吧。
    2017-03-03
  • node.js操作MongoDB的實(shí)例詳解

    node.js操作MongoDB的實(shí)例詳解

    這篇文章主要介紹了node.js操作MongoDB的實(shí)例詳解的相關(guān)資料,希望通過本能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • npm 更改默認(rèn)全局路徑以及國內(nèi)鏡像的方法

    npm 更改默認(rèn)全局路徑以及國內(nèi)鏡像的方法

    今天小編就為大家分享一篇npm 更改默認(rèn)全局路徑以及國內(nèi)鏡像的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • node連接kafka2.0實(shí)現(xiàn)方法示例

    node連接kafka2.0實(shí)現(xiàn)方法示例

    這篇文章主要介紹了node連接kafka2.0,nodejs連接kafka2.0的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了kafka2.0的功能、原理、以及node.js連接kafka2.0的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2023-05-05

最新評論

西华县| 漠河县| 吉林省| 旅游| 武威市| 义马市| 洱源县| 泸溪县| 京山县| 安康市| 昌黎县| 广丰县| 烟台市| 江阴市| 大城县| 开化县| 务川| 涿州市| 平利县| 胶南市| 法库县| 吴忠市| 庆城县| 天台县| 韩城市| 梁平县| 汾阳市| 自治县| 阳山县| 景德镇市| 隆化县| 普定县| 常州市| 东乡县| 崇左市| 交口县| 建宁县| 屯昌县| 旬邑县| 瑞安市| 孟津县|