node.js爬蟲應(yīng)用——前端程序員的詞典command-translator

?雖然高考英語考了135分,大學(xué)英語四級也過了,可到現(xiàn)在喜鼓,寫了兩年代碼,經(jīng)常在寫一個變量的時候隅忿,想半天也想不出來對應(yīng)的英文單詞是什么,總不能很可 (sha) 愛(bi) 的去用拼音吧链峭,最后還是只能去求助有道了杖刷。雖然說打開有道網(wǎng)頁,然后輸入詞語翻譯不算太麻煩甜滨,擔(dān)保每次都這樣,總覺得不夠方便昭娩,也不夠逼格磕诊。

?先來看看我現(xiàn)在用的工具好了,首先安裝command-translator:

cnpm i -g command-translator

?然后打開一個命令行直接翻譯:

tl 翻譯
# 輸出如下
translate
interpret
translator
interpreter

?夠簡單了吧,下面來看看怎么實現(xiàn)的。

?在寫這個工具之前谅海,我也用過一些插件盲镶,如果你用Alfred, 那么你應(yīng)該已經(jīng)用過一些翻譯插件了送漠。后來我覺得它顏值沒有自帶的spotlight高尼酿,所以就卸載了思币,然后裝了個flashlight, 然而那里面的插件太少了惶我,有一個有道翻譯插件毅哗,然而只能英文翻譯成中文翅睛,要它何用酥艳?最后打算自己寫一個,可折騰了兩天后骤铃,發(fā)現(xiàn)flashlight有問題撕瞧,似乎是識別不了輸入的中文页畦,大概有道那個插件也是遇到這個問題好芭,才沒有做中文翻譯英文吧。后來想著現(xiàn)在我們一般用vscode比較多,寫個vscode插件也不錯吧信柿。然而vscode插件的命令中好像是帶不了參數(shù)形病,如果用一個命令來啟動插件,然后再輸入要翻譯的詞語,最后再顯示翻譯結(jié)果邢享,那還是太難用了。最后想著就寫個命令行里面的翻譯工具吧,對于前端程序員而言赠尾,node肯定是裝了的当窗,就用node來寫巫员。

?其實有了思路后疏遏,就很簡單了。首先是要拿到翻譯的結(jié)果拷泽。直接調(diào)用接口的很多,有道官方也有,不過都需要去申請一個key伟葫,個人比較反感眉睹,就簡單點竹海,直接爬網(wǎng)頁慕蔚,分析dom。整個程序用了兩個第三方模塊:cheerio處理dom斋配,類似jquery的語法孔飒;commander用來簡化命令行交互,TJ大神的大作艰争。

?首先爬取頁面坏瞄,解析結(jié)果,這里爬的是金山詞霸的頁面甩卓,之前寫論文時感覺對于一些專業(yè)詞匯鸠匀,金山翻譯的更準(zhǔn)確。幾行代碼就能搞定逾柿,這里直接上代碼好了:

const http = require('http')
const cheerio = require('cheerio')
const baseUrl = "http://www.iciba.com/"
function spider(word){
  return new Promise((resolve,reject)=>{
    http.get(encodeURI(baseUrl+word),res=>{
      let html=''
      res.on('data',data=>html+=data)
      res.on('end',()=>resolve(html))
    })
  })
}
function parse(html){
  const ch = cheerio.load(html)
  const res = []
  ch(".js-base-info .in-base .base-list p span").each((i,el)=>{
    res.push(ch(el).text().replace(new RegExp('缀棍;'),''))
  })
  return res
}

module.exports = function(word){
  return new Promise((resolve,reject)=>{
    spider(word).then(html=> resolve(parse(html)))
  })
}

?然后我么調(diào)用導(dǎo)出的方法宅此,傳參為需要翻譯的詞語,中文英文都可以爬范,最后返回的就是一個數(shù)組父腕,為翻譯結(jié)果。

?最后要解決的是命令行直接輸入tl <word>直接翻譯青瀑,這部分代碼寫在一個js文件中璧亮,我把它叫做bin.js, 然后在package,json配置一個key為"tl"的bin,指向bin,js即可狱窘。bin,js就是獲取tl后面的參數(shù)杜顺,然后調(diào)用上面導(dǎo)出的那個方法來翻譯财搁,最后把結(jié)果打印出來即可蘸炸,代碼:

#!/usr/bin/env node
const program = require('commander')
const translate = require('./translator')
program.version(require('./package.json').version)
  .action((arg,cmd)=>{
    translate(arg).then((res=[])=>{
      res.forEach(r=>console.log(r)
    })
  })
  .parse(process.argv)

?OK了,以后翻譯只需快捷鍵打開終端尖奔,輸入tl <word>就可以了搭儒。

?什么?你不用node提茁,你是寫java的淹禾?都什么年代了,還不學(xué)我茴扁,來搞一波前端铃岔,當(dāng)年我可是寫過C艸,后來C艸艸,再后來Android、Java峭火,然后轉(zhuǎn)前端的毁习。開玩笑啦,看完這篇文章卖丸,隨便你用什么語言都能很快寫一個這樣的詞典出來纺且。

?以后如果再看到你身邊的朋友還在打開網(wǎng)頁來翻譯,或者用拼音的稍浆,直接把這篇文章丟給他把载碌,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市衅枫,隨后出現(xiàn)的幾起案子嫁艇,更是在濱河造成了極大的恐慌,老刑警劉巖弦撩,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裳仆,死亡現(xiàn)場離奇詭異,居然都是意外死亡孤钦,警方通過查閱死者的電腦和手機(jī)歧斟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門纯丸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人静袖,你說我怎么就攤上這事觉鼻。” “怎么了队橙?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵坠陈,是天一觀的道長。 經(jīng)常有香客問我捐康,道長仇矾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任解总,我火速辦了婚禮贮匕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘花枫。我一直安慰自己刻盐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布劳翰。 她就那樣靜靜地躺著敦锌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佳簸。 梳的紋絲不亂的頭發(fā)上乙墙,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音生均,去河邊找鬼听想。 笑死,一個胖子當(dāng)著我的面吹牛疯特,可吹牛的內(nèi)容都是我干的哗魂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼漓雅,長吁一口氣:“原來是場噩夢啊……” “哼录别!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起邻吞,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤组题,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后抱冷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體崔列,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赵讯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盈咳。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖边翼,靈堂內(nèi)的尸體忽然破棺而出鱼响,到底是詐尸還是另有隱情,我是刑警寧澤组底,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布丈积,位于F島的核電站,受9級特大地震影響债鸡,放射性物質(zhì)發(fā)生泄漏江滨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一厌均、第九天 我趴在偏房一處隱蔽的房頂上張望唬滑。 院中可真熱鬧,春花似錦莫秆、人聲如沸间雀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茄螃,卻和暖如春缝驳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背归苍。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工用狱, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拼弃。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓夏伊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吻氧。 傳聞我的和親對象是個殘疾皇子溺忧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容