Python实现本地翻译API
生活随笔
收集整理的這篇文章主要介紹了
Python实现本地翻译API
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
'''
JS加密代碼
var r = function(e) {var t = n.md5(navigator.appVersion), r = "" + (new Date).getTime(), i = r + parseInt(10 * Math.random(), 10);return {ts: r,bv: t,salt: i,sign: n.md5("fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5")}};
r = lts i = salt e = word
'''# import time
# print(int(time.time())*10000)
# '16549975400000' python輸出
# '16549969865516' 有道 lts
# 'sign: ca53ec0dbad1d3ad020fcfabc86f0387' 32位import random
import time
from hashlib import md5
import requestsclass YoudaoSpider:def __init__(self):# url一定要寫抓包時抓到的POST請求的提交地址,但是還需要去掉 url中的'_o',# '_o'這是一種url反爬策略,做了頁面跳轉,若直接訪問會返回{"errorCode":50}self.url = 'https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"}# 獲取lts時間戳,salt加密鹽,sign加密簽名def get_lts_salt_sign(self, word):lts = str(int(time.time()*10000))salt = lts+str(random.randint(0, 9))string = "fanyideskweb" + word + salt + "Ygy_4c=r#e#4EX^NUGUc5"s = md5()# md5的加密串必須為字節碼s.update(string.encode())# 16進制加密sign = s.hexdigest()print(lts, salt, sign)return lts, salt, signdef attack_yd(self, word):lts, salt, sign = self.get_lts_salt_sign(word)# 構建form表單數據data = {'i': word,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': salt,'sign': sign,'lts': lts,'bv': 'bdc0570a34c12469d01bfac66273680d','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_REALTlME'}# 使用 reqeusts.post()方法提交請求resp = requests.post(self.url, headers=self.headers, data=data)# 將json格式的字符串轉為python數據類型html = resp.json()print(html)# {"translateResult":[[{"tgt":"你好世界","src":"hello world"}]]}res = html['translateResult'][0][0]['tgt']print('翻譯結果:', res)def run(self):try:word = input('請輸入要翻譯的單詞:')self.attack_yd(word)except Exception as e:print(e)if __name__ == '__main__':spider = YoudaoSpider()spider.run()
網址https://fanyi.youdao.com/
先去控制臺抓包 獲取表單數據 仔細觀察變化規律 salt lts sign 三個是變化的數據
再去源代碼部分格式化JS代碼分析 獲取加密字符串的Python表示
總結
以上是生活随笔為你收集整理的Python实现本地翻译API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 模拟ping_模拟Ping操作
- 下一篇: Python基础入门6_文件和异常