程式設計本身是跟年齡無關的一件事,不論你現在是十四五歲,還是四五十歲,如果你熱愛它,並且願意持續投入其中,必定會有所收穫。
本文就來自程式設計教室一位“小”讀者的投稿(互助學習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的程式設計教室