網易有道翻譯是一款非常優秀的產品,他們的神經網路翻譯真的挺無敵,無奈有道客戶端實在是太難用了,而且在某些具體場景 (比如對網站進行批量翻譯) 無法使用,而有道的云服務又特別的貴,一般人是無法支付得起的,
然而理論上而言,所有看得見的東西都是爬得到的,有道翻譯介面也一樣,為了祖國未來花朵(咸魚) 的發展,今天就來給大家介紹一下如何用 Python 超簡單快速地呼叫有道翻譯得到翻譯結果 ,此外,本教程僅供學習哦,
如果你懶得看教程,只想要拿到源代碼,請關注 Python 實用寶典公眾號并回復:“Python 有道介面” ,
PS:很多人在學習Python的程序中,往往因為遇問題解決不了或者沒好的教程從而導致自己放棄,為此我整理啦從基礎的python腳本到web開發、爬蟲、django、資料挖掘等【PDF等】需要的可以進Python全堆疊開發交流.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,里面有最新Python教程專案可拿,不懂的問題有老司機解決哦,一起相互監督共同進步
1. 找到翻譯相關介面
打開 fanyi.youdao.com 隨便輸入一個單詞進行翻譯,使用開發者工具(空白處右鍵檢查或 F12)查看請求資料,
可以看到,請求的介面是:\
http://fanyi.youdao.com/translate_o?smartr...
開發者工具往下拉,查看 Form Data 得到請求的 body 是:
- i: 你好
- from: AUTO
- to: AUTO
- smartresult: dict
- client: fanyideskweb
- salt: 15707931034929
- sign: 99d0fc48506346afc40e36d5648cc320
- ts: 1570793103492
- bv: ca3dedaa9d15daa003dbdaaa991540d1
- doctype: json
- version: 2.1
- keyfrom: fanyi.web
- action: FY_BY_REALTlME
2. 決議請求 body 內容
顯然,以上 body 內容中,i 是需要翻譯的文本,from 是原文語言,to 是翻譯語言,我們其他的引數只需要設定為一致的即可,現在需要解決這幾個引數:salt, sign, bv,ts.
ts 從格式上看就知道是時間戳,而且 ts 和 salt 內容很接近,且只差了一位,可以合理猜測,salt 就是 ts+1 位亂數,
接下來就差 sign 和 bv,這兩個值看起來非常像 MD5,不過不確定是什么引數的 MD5,因此需要閱讀前端源代碼,
在 performance 中錄制,重新請求介面,找到翻譯介面的前端代碼 (fanyi.min.js). 然后搜索我們的關鍵詞 sign 或者 bv. 使用 debug 工具查看值的流動,
從這里我們可以知道,bv 即瀏覽器頭部資訊 MD5 的值,我的瀏覽器頭部是這樣的: "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
實際上在請求介面的時候隨便用什么頭部都能過這個校驗,只要符合標準就行,
最后一個未知引數是 sign. 同樣,我們打開 debug 模式,輸入資訊,就可以得到其值了,
很顯然,sign 由 n.md5 ("fanyideskweb" + e + i + "n% A-rKaT5fb [Gy?;N5@Tj") 組成,而 e 根據 debug 顯示的結果,就是我們需要翻譯的資訊,而 i 就是 salt. 因此 4 個引數我們全部成功反編譯!
3. 用 Python 呼叫介面進行翻譯
我們只需要偽造請求的 body,向介面發送 post 請求即可得到翻譯結果,比如,ts 是 13 位時間戳,在 Python 中可以使用 time.time ()*1000 獲得:
- ts = str(int(time.time()*1000))
salt 是 ts + 一位亂數,太簡單了:
- salt = ts + str(random.randint(0, 9))
bv 是瀏覽器 User-Agent,需要進行 MD5 計算,我們新建一個 MD5 函式,將字串傳入函式獲得 MD5,
- def get_md5(string):
- string = string.encode('utf-8')
- md5 = hashlib.md5(string).hexdigest()
- return md5
- bv = get_md5("5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36")
sign 是四個字串組成后進行 MD5 的結果:
- sign = get_md5("fanyideskweb" + context + salt + "n%A-rKaT5fb[Gy?;N5@Tj")
這樣,我們獲得了所有需要用到的引數,集合在一起后發送 post 請求,
試一下效果:
- print (translation (' 你好 '))
成功得到介面回傳的翻譯結果:
- (base) F:\push\20191011>python YouDaoSpider.py
- hello
以上就是本次分享,另外很多人在學習Python的程序中,往往因為遇問題解決不了或者沒好的教程從而導致自己放棄,為此我整理啦從基礎的python腳本到web開發、爬蟲、django、資料挖掘等【PDF等】需要的可以進Python全堆疊開發交流.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,里面有最新Python教程專案可拿,不懂的問題有老司機解決哦,一起相互監督共同進步本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作洗掉處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/196566.html
標籤:Python
