摘要:我們的小項目就初始化成功了,就可以認真思考代碼了首先分析糗事百科我們打開糗事百科會發現它的還是很簡單,由于我們只是爬取段子所以如下,就是頁數。
Node命令行工具開發【看段子】
你有沒有上班想看笑話卻又怕領導發現的經歷?現在我們就用幾十行代碼寫一個命令行看笑話段子的小程序,從此無需擔心領導的視察。這篇文章和上一篇差不多都是命令行小工具開發,不過本篇更偏向于小爬蟲的開發總覽:命令行看段子小程序
我們先來看看我們今天的小目標:
先為它起個命吧:joke-cli
爬取并提取 糗事百科的笑話
輸出到命令行按下回車顯示一條段子
初識[新手村]下面我們將介紹今天用到的主要模塊
cheeriocheerio可理解為服務器端的jQuery,基本用法與jQuery一樣。有了它,我們在寫小爬蟲時就可拋開那可愛又可恨的正則表達式了。從此擁抱幸福生活。
用法如下:
let cheerio = require("cheerio") // 將html文本轉化成可用jQuery操作的dom,,然后你就可以把它當成jQuery了 let $ = cheerio.load("Hello world
") $("h2.title").text("Hello there!") $("h2").addClass("welcome") $.html() //=>Hello there!
更多請參考cheerio
superagentsuperagent專注于處理服務端/客戶端的http請求,用法如下:
request .get(url) .end(function(err, res){ });
就是這么簡答,你已經學會使用它了,別懵逼,這三行代碼,已經完全夠我們本次示例的使用了。額,當然了,更多的請移步官方文檔
superagent
[[譯] SuperAgent中文使用文檔](https://cnodejs.org/topic/537...
初出茅廬【先拿百度練練手】我們已經介紹了今天的兩大主角,那就先來練練手,就用百度吧
const superAgent = require("superagent") const cheerio = require("cheerio") const URL = "http://www.baidu.com/" // 發起GET請求 superAgent .get(URL) .end((err, res)=>{ if(err) console.error(err) // 用cheerio處理返回的html const $ = cheerio.load(res.text) // 找到并打印出按鈕#su的值 console.log($("#su").val()) // 百度一下 })
ok,現在已經了解并能使用這兩個模塊,更多的探索在自己,我們應當再用寫時間去閱讀其文檔,對其有深入的了解。接下來就是用剛學的這些知識為你漲姿勢了。
開始開發joke-cli 初始化項目$ 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" }
現在執行npm link。我們的小項目就初始化成功了,就可以認真思考代碼了
首先分析糗事百科url我們打開糗事百科會發現它的URL還是很簡單,由于我們只是爬取段子所以url如下http://www.qiushibaike.com/text/page/2/4965899,2就是頁數。
開始編寫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結構,可以發先每條笑話都在一個div.article中,笑話的內容則在div.content中
在分析完html結夠后,現在可以用我們用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()) //將打印出每條笑話 }) }) ···實現命令行交互
這里我們需要用到readlinem模塊
Readline(逐行讀取)require("readline") 模塊提供了一個接口,用于從可讀流(如 process.stdin)讀取數據,每次讀取一行。 基本用法如下:
使用 readline.Interface 類實現一個簡單的命令行界面:
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: "請輸入> " }); //rl.prompt() 方法會在 output 流中新的一行寫入 readline.Interface 實例配置后的 prompt,用于為用戶提供一個可供輸入的新的位置 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中文網
改寫index.js實現命令行交互功能#!/usr/bin/env node const superAgent = require("superagent") const cheerio = require("cheerio") const readline = require("readline") const colors = require("colors") // 創建readlinde.Interface 實現命令行交互 const rl = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: " ? 您正在使用joke-cli,按下回車查看笑話 ? >>>" }) let url = "http://www.qiushibaike.com/text/page/" let page = 1 // 使用數組來存放笑話 let jokeStories = [] // 載入笑話并存入數組中 function loadJokes(){ // 數組中的笑話不足三條時就請求下一頁的數據 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()) //存入數組 }) page++ }) } } rl.prompt() loadJokes() // line事件 每當 input 流接收到接收行結束符( 、 或 )時觸發 "line" 事件。 通常發生在用戶按下鍵或 鍵。 // 按下回車鍵顯示一條笑話 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) })
這里我們用了一個數組存放笑話,每按下回車,就顯示一條(shift()刪除并返回數組第一個元素),當數組中不足三條時就請求新的一頁
總結到此,我們的joke-cli就開發完成。此時我們應該了解了superagent, cheerio, readline等模塊的使用。這會兒應該趁熱打鐵,快去好好看看這些模塊吧
相關鏈接原文鏈接xingxin.me
cheerio
superagent
譯)SuperAgent中文使用文檔
Node.js中文網
colors.js
大家可以關注我的公眾號,一起玩耍。有技術干貨也有扯淡亂談,關注回復[888]領取福利
左手代碼右手磚,拋磚引玉
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82080.html
摘要:另一方面來說,也不是說程序猿就不可以通過提升自己的實力找到女票。好了,人口調查填寫完畢以上為依云醬的原文,,具體的發布時間,大概在下周的今天 showImg(https://segmentfault.com/img/bVQ7ZG?w=900&h=385); 社區專訪的第一邀請了公子,回憶傳送門,小伙伴似乎對公子頗為喜歡,大概是社區聲望榜第一的頭銜為他加分了不少,迷了大家的眼,忽略了他圓...
摘要:在源碼中也可以看到,在執行之前動態的引入了這些解釋器模塊。因為認為如果你要使用,那么一定會有對應的依賴,這個模塊就是與同級的依賴,也就是說可以放心的進行,大致這樣的結構的位置在這里執行腳本以及一個相反的栗子 NPM是Node.js的包管理工具,隨著Node.js的出現,以及前端開發開始使用gulp、webpack、rollup以及其他各種優秀的編譯打包工具(大多數采用Node.js來實...
摘要:命令行工具開發有許多命令行工具。現在我們就用來開發一個實用的命令行小工具一初探一個最簡單的命令行工具首先我們新建一目錄,然后執行生成文件新建一目錄并在目錄下創建一個執行我們可以看到終端輸出。。 node命令行工具開發 NodeJs有許多命令行工具。它們全局安裝,并提供一個命令供我們使用,完成相應的功能。 現在我們就用node來開發一個實用的命令行小工具 一.初探 一個最簡單的命令行工具...
摘要:目前半島局勢緊張,朝鮮已進行了六次核試驗,被廣泛認為已經擁有了核彈頭。另外朝鮮的導彈技術今年以來快速突破,成功試射了射程可覆蓋美國本土的洲際彈道導彈。這個版的內容傳到互聯網上后,迅速刷屏,引起紛紛議論。 SplderApi2 Node-SplderApi2 第二版 基于Node 的網絡爬蟲 API接口 包括前端開發日報、kugou音樂、前端top框架排行、妹紙福利、搞笑視頻、段子笑話、...
摘要:總結本文以微信小程序常規的發布流程為切入點,循序漸進地介紹了如何集成實現微信小程序預覽上傳功能。 showImg(https://raw.githubusercontent.com/yingye/Blog/master/images/wechat-jenkins.png); 本文首發于 https://github.com/yingye/Blo... ,歡迎各位關注我的Blog,正文以...
閱讀 933·2021-09-07 09:58
閱讀 1484·2021-09-07 09:58
閱讀 2869·2021-09-04 16:40
閱讀 2501·2019-08-30 15:55
閱讀 2404·2019-08-30 15:54
閱讀 1364·2019-08-30 15:52
閱讀 423·2019-08-30 10:49
閱讀 2598·2019-08-29 13:21