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

Crossin先生發表於2020-07-17
程式設計本身是跟年齡無關的一件事,不論你現在是十四五歲,還是四五十歲,如果你熱愛它,並且願意持續投入其中,必定會有所收穫。
本文就來自程式設計教室一位“小”讀者的投稿(互助學習1群裡的同學應該對作者的名字很熟悉吧)。我看著他不停地產出新的程式碼和技術文章,不禁感嘆“後生可畏”。
這是一個爬蟲基礎分析和操作的開發案例,在此分享給大家。

當我在電腦上需要翻譯一個單詞時,我會這樣做:

開啟瀏覽器 = > 開啟百度翻譯 = > 輸入單詞 = > 得到翻譯

不過有時候,當我在命令列環境下寫程式碼的時候,懶得再切換到瀏覽器裡等待頁面的載入。

於是我就想,能否用萬能的 python 製作一個 命令列下的翻譯工具 呢?

說幹就幹!

網上搜尋了點資訊,加上一頓操作,最終被我搗鼓出來了。來看下最終的效果:

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

開發思路

其中獲取有道翻譯和百度翻譯的原理都差不多,這裡我們選取百度翻譯來玩耍一下啦:

首先開啟百度翻譯:http://fanyi.baidu.com

接下來右鍵點選 檢查 ,選擇 Network 中的 XHR (向伺服器傳送的資料請求)。然後我們在輸入框裡輸入 save 這個單詞,我們可以看到一時間這裡面多了幾個 sug 標籤,點開一看:

可以看到,這個 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的程式設計教室

相關文章