用Python作一個簡單的翻譯工具

編程自己是跟年齡無關的一件事,不論你如今是十四五歲,仍是四五十歲,若是你熱愛它,而且願意持續投入其中,一定會有所收穫。
本文就來自編程教室一位「小」讀者的投稿(互助學習1羣裏的同窗應該對做者的名字很熟悉吧)。我看着他不停地產出新的代碼和技術文章,不由感嘆「後生可畏」。
這是一個爬蟲基礎分析和操做的開發案例,在此分享給你們。

當我在電腦上須要翻譯一個單詞時,我會這樣作:前端

打開瀏覽器 = > 打開百度翻譯 = > 輸入單詞 = > 獲得翻譯python

不過有時候,當我在命令行環境下寫代碼的時候,懶得再切換到瀏覽器裏等待頁面的加載。git

因而我就想,可否用萬能的 python 製做一個 命令行下的翻譯工具 呢?github

說幹就幹!編程

網上搜索了點信息,加上一頓操做,最終被我搗鼓出來了。來看下最終的效果:json

在這個工具中,我用了 百度有道 以及 谷歌 (可選)的翻譯。api

開發思路

其中獲取有道翻譯和百度翻譯的原理都差很少,這裏咱們選取百度翻譯來玩耍一下啦:瀏覽器

首先打開百度翻譯:http://fanyi.baidu.com服務器

接下來右鍵點擊 檢查 ,選擇 Network 中的 XHR (向服務器發送的數據請求)。而後咱們在輸入框裏輸入 save 這個單詞,咱們能夠看到一時間這裏面多了幾個 sug 標籤,點開一看:app

能夠看到,這個 sug 請求裏面就有咱們想要的數據。點進去, Request URL 就是咱們須要請求的網址,另外在 Request Method 看到是 POST 方式,也就是提交表單:

移到最後,咱們看見了提交的表單參數:

Form Data 中,咱們看見表單是一個字典: {'kw': 'save'} ,這裏 save 是咱們本身輸入的,也就是咱們要查詢的單詞,所以咱們使用 requests.post 來模擬這個請求:

# 網址和表單
url= 'https://fanyi.baidu.com/sug'
Form_data = {'kw': word}

# post方式請求網站
response = requests.post(url, data = Form_data,headers=headers)

咱們能夠試着打印出返回的東西,你會發現是以 JSON 格式返回的,所以須要引入內置庫 json 來解析:

content = json.loads(response.text)   # 加載成字典形式

在打印出的 json 格式的文本中咱們發現翻譯結果在 'data'['v']( 剛剛的圖片裏咱們也看見了),接下來提取並返回:

result = content['data'][0]['v']   # 獲取翻譯結果
return result

這樣就完成了提交表單了,實現百度翻譯了。

這裏用到的就是一些經常使用的爬蟲分析和操做,有道翻譯也基本相似,再也不贅述,具體操做可參加文末給出的完整代碼。

接下來咱們來看看不同凡響的谷歌翻譯,這個玩意實在有些複雜。谷歌翻譯是有 api 的,可是要錢……我不想付錢……網上有大佬給出瞭解決方案(這裏咱們簡單地看一下原理):

按照近似百度翻譯的方式操做,咱們看到這裏多出了一個請求,這裏面有咱們想要的翻譯結果:

咱們回到以前的 Request URL 看一下,發現前面的直接複製就行了, q 是咱們須要翻譯的詞,可是這個 tk 參數倒是個棘手的參數。我代碼裏用到的解法是網上的,仿照谷歌翻譯頁面上的提供的函數,用 JavaScript 去計算出了這個參數(我懷疑他就是拿的前端源碼,沒仔細對照)。

那麼如何在 python 中執行 JavaScript 代碼呢,咱們能夠經過 pyexecjs 這個庫(注意這個庫導入名是 execjs )。這個部分的源碼就在 Py4Js 這個類裏邊了。

特別說明下,由於沒法直接使用谷歌翻譯,因此我把它作成了可選項,默認不會調用。

使用方法

我已經將這個項目發佈到了 pypi ,你能夠經過 pip 命令按以下方式安裝:

pip install quicktranslate

用起來也是很是的簡單(加上 -g 可增長谷歌翻譯結果):

trans -t 你要翻譯的東西

示例:

$ trans -t 你好
=========================
youdao translate result:hello
baidu translate result:[nǐ hǎo] how do you do; how are you; hello;
=========================

$ trans -t 你好 -g
=========================
youdao translate result:hello
baidu translate result:[nǐ hǎo] how do you do; how are you; hello;
google translate result:Hello there
=========================

本案例完整代碼: https://github.com/pynickle/a... pip安裝命令: pip install quicktranslate

做者:pynickle

------

一塊兒學,走得遠!

歡迎搜索: Crossin的編程教室

相關文章
相關標籤/搜索