然而理論上而言,全部看得見的東西都是爬獲得的,有道翻譯接口也同樣。爲了祖國將來花朵(鹹魚) 的發展,今天就來給你們介紹一下如何用 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
- 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 位隨機數。markdown
接下來就差 sign 和 bv,這兩個值看起來很是像 MD5,不過不肯定是什麼參數的 MD5,所以須要閱讀前端源代碼。網絡
在 performance 中錄製,從新請求接口,找到翻譯接口的前端代碼 (fanyi.min.js). 而後搜索咱們的關鍵詞 sign 或者 bv. 使用 debug 工具查看值的流動。dom
從這裏咱們能夠知道,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 模式,輸入信息,就能夠獲得其值了。
很顯然,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教程項目可拿,不懂的問題有老司機解決哦,一塊兒相互監督共同進步本文的文字及圖片來源於網絡加上本身的想法,僅供學習、交流使用,不具備任何商業用途,版權歸原做者全部,若有問題請及時聯繫咱們以做刪除處理。