国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Node命令行工具開發(fā)【看段子小工具】

kelvinlee / 2430人閱讀

摘要:我們的小項(xiàng)目就初始化成功了,就可以認(rèn)真思考代碼了首先分析糗事百科我們打開糗事百科會(huì)發(fā)現(xiàn)它的還是很簡單,由于我們只是爬取段子所以如下,就是頁數(shù)。

Node命令行工具開發(fā)【看段子】
你有沒有上班想看笑話卻又怕領(lǐng)導(dǎo)發(fā)現(xiàn)的經(jīng)歷?現(xiàn)在我們就用幾十行代碼寫一個(gè)命令行看笑話段子的小程序,從此無需擔(dān)心領(lǐng)導(dǎo)的視察。這篇文章和上一篇差不多都是命令行小工具開發(fā),不過本篇更偏向于小爬蟲的開發(fā)
總覽:命令行看段子小程序

我們先來看看我們今天的小目標(biāo):

先為它起個(gè)命吧:joke-cli

爬取并提取 糗事百科的笑話

輸出到命令行按下回車顯示一條段子

初識(shí)[新手村]

下面我們將介紹今天用到的主要模塊

cheerio
cheerio可理解為服務(wù)器端的jQuery,基本用法與jQuery一樣。有了它,我們?cè)趯懶∨老x時(shí)就可拋開那可愛又可恨的正則表達(dá)式了。從此擁抱幸福生活。

用法如下:

let cheerio = require("cheerio")

// 將html文本轉(zhuǎn)化成可用jQuery操作的dom,,然后你就可以把它當(dāng)成jQuery了
let $ = cheerio.load("

Hello world

") $("h2.title").text("Hello there!") $("h2").addClass("welcome") $.html() //=>

Hello there!

更多請(qǐng)參考cheerio

superagent

superagent專注于處理服務(wù)端/客戶端的http請(qǐng)求,用法如下:

 request
   .get(url)
   .end(function(err, res){

   });

就是這么簡答,你已經(jīng)學(xué)會(huì)使用它了,別懵逼,這三行代碼,已經(jīng)完全夠我們本次示例的使用了。額,當(dāng)然了,更多的請(qǐng)移步官方文檔

superagent

[[譯] SuperAgent中文使用文檔](https://cnodejs.org/topic/537...

初出茅廬【先拿百度練練手】

我們已經(jīng)介紹了今天的兩大主角,那就先來練練手,就用百度吧

const superAgent = require("superagent")
const cheerio = require("cheerio")
const URL = "http://www.baidu.com/"

// 發(fā)起GET請(qǐng)求
superAgent
  .get(URL) 
  .end((err, res)=>{
      if(err) console.error(err)
    // 用cheerio處理返回的html
      const $ = cheerio.load(res.text)
    // 找到并打印出按鈕#su的值
    console.log($("#su").val())  // 百度一下
  })   

ok,現(xiàn)在已經(jīng)了解并能使用這兩個(gè)模塊,更多的探索在自己,我們應(yīng)當(dāng)再用寫時(shí)間去閱讀其文檔,對(duì)其有深入的了解。接下來就是用剛學(xué)的這些知識(shí)為你漲姿勢(shì)了。

開始開發(fā)joke-cli 初始化項(xiàng)目
$ mkdir joke-cli
$ cd joke-cli
$ npm init
$ npm install cheerio superagent colors --save //colors 輸出美化

新建好bin/index.js文件,并加入package.json文件中

"bin": {
    "joke-cli": "./bin/index.js"
 }

現(xiàn)在執(zhí)行npm link。我們的小項(xiàng)目就初始化成功了,就可以認(rèn)真思考代碼了

首先分析糗事百科url

我們打開糗事百科會(huì)發(fā)現(xiàn)它的URL還是很簡單,由于我們只是爬取段子所以u(píng)rl如下http://www.qiushibaike.com/text/page/2/4965899,2就是頁數(shù)。

開始編寫index.js
#!/usr/bin/env node

const superAgent = require("superagent")
const cheerio = require("cheerio")

let url = "http://www.qiushibaike.com/text/page/"
let page = 1

superAgent
    .get(url+page) 
    .end((err, res)=>{
          if(err) console.error(err)
        console.log(res.text)
    })

f12查看糗事百科的HTML結(jié)構(gòu),可以發(fā)先每條笑話都在一個(gè)div.article中,笑話的內(nèi)容則在div.content

在分析完html結(jié)夠后,現(xiàn)在可以用我們用cheerio很容易就可以取出笑話

···
.end((err, res)=>{
  if(err) console.error(err)
  const $ = cheerio.load(res.text)
  const jokeList = $(".article .content span")
  jokeList.each(function(i, item){
    console.log($(this).text()) //將打印出每條笑話
  })    
})    
···
實(shí)現(xiàn)命令行交互

這里我們需要用到readlinem模塊

Readline(逐行讀取)
require("readline") 模塊提供了一個(gè)接口,用于從可讀流(如 process.stdin)讀取數(shù)據(jù),每次讀取一行。 基本用法如下:

使用 readline.Interface 類實(shí)現(xiàn)一個(gè)簡單的命令行界面:

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  prompt: "請(qǐng)輸入> "
});

//rl.prompt() 方法會(huì)在 output 流中新的一行寫入 readline.Interface 實(shí)例配置后的 prompt,用于為用戶提供一個(gè)可供輸入的新的位置
rl.prompt();

rl.on("line", (line) => {
  switch(line.trim()) {
    case "hello":
      console.log("world!");
      break;
    default:
      console.log(`你輸入的是:"${line.trim()}"`);
      break;
  }
  rl.prompt();
}).on("close", () => {
  console.log("再見!");
  process.exit(0);
});

更多參考Node.js中文網(wǎng)

改寫index.js實(shí)現(xiàn)命令行交互功能
#!/usr/bin/env node

const superAgent = require("superagent")
const cheerio = require("cheerio")
const readline = require("readline")
const colors = require("colors")
// 創(chuàng)建readlinde.Interface 實(shí)現(xiàn)命令行交互
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: " ?  您正在使用joke-cli,按下回車查看笑話 ? >>>"
})
let url = "http://www.qiushibaike.com/text/page/"
let page = 1

// 使用數(shù)組來存放笑話
let jokeStories = []
// 載入笑話并存入數(shù)組中
function loadJokes(){
      // 數(shù)組中的笑話不足三條時(shí)就請(qǐng)求下一頁的數(shù)據(jù)
    if(jokeStories.length<3){
        superAgent
        .get(url+page) 
        .end((err, res)=>{
            if(err) console.error(err)
            const $ = cheerio.load(res.text)
            const jokeList = $(".article .content span")
            jokeList.each(function(i, item){
                jokeStories.push($(this).text()) //存入數(shù)組
            })
            page++            
        })
    }
}

rl.prompt()
loadJokes()
// line事件 每當(dāng) input 流接收到接收行結(jié)束符(
、
 或 
)時(shí)觸發(fā) "line" 事件。 通常發(fā)生在用戶按下  鍵或  鍵。
// 按下回車鍵顯示一條笑話
rl.on("line", (line) => {
    if(jokeStories.length>0){
        console.log("======================")
        console.log(jokeStories.shift().bgCyan.black) //用colors模塊改變輸出顏色
        loadJokes()
    }else{
        console.log("正在加載中~~~".green)
    }
    rl.prompt()
}).on("close", () => {
    console.log("Bye!")
    process.exit(0)
})

這里我們用了一個(gè)數(shù)組存放笑話,每按下回車,就顯示一條(shift()刪除并返回?cái)?shù)組第一個(gè)元素),當(dāng)數(shù)組中不足三條時(shí)就請(qǐng)求新的一頁

總結(jié)

到此,我們的joke-cli就開發(fā)完成。此時(shí)我們應(yīng)該了解了superagent, cheerio, readline等模塊的使用。這會(huì)兒應(yīng)該趁熱打鐵,快去好好看看這些模塊吧

相關(guān)鏈接

原文鏈接xingxin.me

cheerio

superagent

譯)SuperAgent中文使用文檔

Node.js中文網(wǎng)

colors.js

大家可以關(guān)注我的公眾號(hào),一起玩耍。有技術(shù)干貨也有扯淡亂談,關(guān)注回復(fù)[888]領(lǐng)取福利

左手代碼右手磚,拋磚引玉

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/82080.html

相關(guān)文章

  • SegmentFault 社區(qū)訪談 | 有明,不僅僅是死亡詩社的程序猿

    摘要:另一方面來說,也不是說程序猿就不可以通過提升自己的實(shí)力找到女票。好了,人口調(diào)查填寫完畢以上為依云醬的原文,,具體的發(fā)布時(shí)間,大概在下周的今天 showImg(https://segmentfault.com/img/bVQ7ZG?w=900&h=385); 社區(qū)專訪的第一邀請(qǐng)了公子,回憶傳送門,小伙伴似乎對(duì)公子頗為喜歡,大概是社區(qū)聲望榜第一的頭銜為他加分了不少,迷了大家的眼,忽略了他圓...

    Taonce 評(píng)論0 收藏0
  • 了解可執(zhí)的NPM包

    摘要:在源碼中也可以看到,在執(zhí)行之前動(dòng)態(tài)的引入了這些解釋器模塊。因?yàn)檎J(rèn)為如果你要使用,那么一定會(huì)有對(duì)應(yīng)的依賴,這個(gè)模塊就是與同級(jí)的依賴,也就是說可以放心的進(jìn)行,大致這樣的結(jié)構(gòu)的位置在這里執(zhí)行腳本以及一個(gè)相反的栗子 NPM是Node.js的包管理工具,隨著Node.js的出現(xiàn),以及前端開發(fā)開始使用gulp、webpack、rollup以及其他各種優(yōu)秀的編譯打包工具(大多數(shù)采用Node.js來實(shí)...

    MingjunYang 評(píng)論0 收藏0
  • node命令工具開發(fā)【翻譯工具

    摘要:命令行工具開發(fā)有許多命令行工具?,F(xiàn)在我們就用來開發(fā)一個(gè)實(shí)用的命令行小工具一初探一個(gè)最簡單的命令行工具首先我們新建一目錄,然后執(zhí)行生成文件新建一目錄并在目錄下創(chuàng)建一個(gè)執(zhí)行我們可以看到終端輸出。。 node命令行工具開發(fā) NodeJs有許多命令行工具。它們?nèi)职惭b,并提供一個(gè)命令供我們使用,完成相應(yīng)的功能。 現(xiàn)在我們就用node來開發(fā)一個(gè)實(shí)用的命令行小工具 一.初探 一個(gè)最簡單的命令行工具...

    Yang_River 評(píng)論0 收藏0
  • 基于 Node+express 爬蟲的數(shù)據(jù) API,爬一套自己的api數(shù)據(jù)(2)

    摘要:目前半島局勢(shì)緊張,朝鮮已進(jìn)行了六次核試驗(yàn),被廣泛認(rèn)為已經(jīng)擁有了核彈頭。另外朝鮮的導(dǎo)彈技術(shù)今年以來快速突破,成功試射了射程可覆蓋美國本土的洲際彈道導(dǎo)彈。這個(gè)版的內(nèi)容傳到互聯(lián)網(wǎng)上后,迅速刷屏,引起紛紛議論。 SplderApi2 Node-SplderApi2 第二版 基于Node 的網(wǎng)絡(luò)爬蟲 API接口 包括前端開發(fā)日?qǐng)?bào)、kugou音樂、前端top框架排行、妹紙福利、搞笑視頻、段子笑話、...

    beanlam 評(píng)論0 收藏0
  • 微信程序集成 Jenkins

    摘要:總結(jié)本文以微信小程序常規(guī)的發(fā)布流程為切入點(diǎn),循序漸進(jìn)地介紹了如何集成實(shí)現(xiàn)微信小程序預(yù)覽上傳功能。 showImg(https://raw.githubusercontent.com/yingye/Blog/master/images/wechat-jenkins.png); 本文首發(fā)于 https://github.com/yingye/Blo... ,歡迎各位關(guān)注我的Blog,正文以...

    young.li 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<