Python反編譯調用有道翻譯(附完整代碼)

     網易有道翻譯是一款很是優秀的產品,他們的神經網絡翻譯真的挺無敵。無奈有道客戶端實在是太難用了,並且在某些具體場景 (好比對網站進行批量翻譯) 沒法使用,而有道的雲服務又特別的貴,通常人是沒法支付得起的。

然而理論上而言,全部看得見的東西都是爬獲得的,有道翻譯接口也同樣。爲了祖國將來花朵(鹹魚) 的發展,今天就來給你們介紹一下如何用 Python 超簡單快速地調用有道翻譯獲得翻譯結果 。此外,本教程僅供學習哦。前端

若是你懶得看教程,只想要拿到源代碼,請關注 Python 實用寶典公衆號並回復:「Python 有道接口」 。
PS:不少人在學習Python的過程當中,每每由於遇問題解決不了或者沒好的教程從而致使本身放棄,爲此我整理啦從基礎的python腳本到web開發、爬蟲、django、數據挖掘等【PDF等】須要的能夠進Python全棧開發交流.裙 :一久武其而而流一思(數字的諧音)轉換下能夠找到了,裏面有最新Python教程項目可拿,不懂的問題有老司機解決哦,一塊兒相互監督共同進步python

 

1. 找到翻譯相關接口

打開 fanyi.youdao.com 隨便輸入一個單詞進行翻譯,使用開發者工具(空白處右鍵檢查或 F12)查看請求數據。web

 

 

 

能夠看到,請求的接口是:\
http://fanyi.youdao.com/translate_o?smartr...django

開發者工具往下拉,查看 Form Data 獲得請求的 body 是:json

  1. i: 你好
  2. from: AUTO
  3. to: AUTO
  4. smartresult: dict
  5. client: fanyideskweb
  6. salt: 15707931034929
  7. sign: 99d0fc48506346afc40e36d5648cc320
  8. ts: 1570793103492
  9. bv: ca3dedaa9d15daa003dbdaaa991540d1
  10. doctype: json
  11. version: 2.1
  12. keyfrom: fanyi.web
  13. action: FY_BY_REALTlME
 

2. 解析請求 body 內容

顯然,以上 body 內容中,i 是須要翻譯的文本,from 是原文語言,to 是翻譯語言。咱們其餘的參數只須要設置爲一致的便可。如今須要解決這幾個參數:salt, sign, bv,ts.瀏覽器

ts 從格式上看就知道是時間戳,並且 ts 和 salt 內容很接近,且只差了一位,能夠合理猜想,salt 就是 ts+1 位隨機數。markdown

 

Python 反編譯有道翻譯
 

 

接下來就差 sign 和 bv,這兩個值看起來很是像 MD5,不過不肯定是什麼參數的 MD5,所以須要閱讀前端源代碼。網絡

在 performance 中錄製,從新請求接口,找到翻譯接口的前端代碼 (fanyi.min.js). 而後搜索咱們的關鍵詞 sign 或者 bv. 使用 debug 工具查看值的流動。dom

 

Python 反編譯有道翻譯
 

 

從這裏咱們能夠知道,bv 即瀏覽器頭部信息 MD5 的值,個人瀏覽器頭部是這樣的: "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"ide

實際上在請求接口的時候隨便用什麼頭部都能過這個校驗,只要符合標準就行。

最後一個未知參數是 sign. 一樣,咱們打開 debug 模式,輸入信息,就能夠獲得其值了。

 

Python 反編譯有道翻譯
 

 

很顯然,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 得到:

  1. ts = str(int(time.time()*1000))

salt 是 ts + 一位隨機數,太簡單了:

  1. salt = ts + str(random.randint(0, 9))

bv 是瀏覽器 User-Agent,須要進行 MD5 計算,咱們新建一個 MD5 函數,將字符串傳入函數得到 MD5。

  1. def get_md5(string):
  2. string = string.encode('utf-8')
  3. md5 = hashlib.md5(string).hexdigest()
  4. return md5
  5. 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 的結果:

  1. sign = get_md5("fanyideskweb" + context + salt + "n%A-rKaT5fb[Gy?;N5@Tj")

這樣,咱們得到了全部須要用到的參數,集合在一塊兒後發送 post 請求。

 

Python 反編譯有道翻譯
 

 

試一下效果:

  1. print (translation (' 你好 '))

成功獲得接口返回的翻譯結果:

    1. (base) F:\push\20191011>python YouDaoSpider.py
    2. hello
      以上就是本次分享,另外不少人在學習Python的過程當中,每每由於遇問題解決不了或者沒好的教程從而致使本身放棄,爲此我整理啦從基礎的python腳本到web開發、爬蟲、django、數據挖掘等【PDF等】須要的能夠進Python全棧開發交流.裙 :一久武其而而流一思(數字的諧音)轉換下能夠找到了,裏面有最新Python教程項目可拿,不懂的問題有老司機解決哦,一塊兒相互監督共同進步

      本文的文字及圖片來源於網絡加上本身的想法,僅供學習、交流使用,不具備任何商業用途,版權歸原做者全部,若有問題請及時聯繫咱們以做刪除處理。

相關文章
相關標籤/搜索