本文共 2667 字,大约阅读时间需要 8 分钟。
1.打开有道在线翻译,并请求翻译
1.1获取翻译接口 1.2两次翻译数据对比 第一次 第二次 总结: 我们发现请求数据有差异: salt,ts,sign,并且可以看到i对应翻译词组2.查找js处理逻辑
2.1查看对应js 2.2处理逻辑 2.3python处理word = "test"import hashlibimport timeimport random# var t = n.md5(navigator.appVersion),对应浏览器版本t = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"bv = hashlib.md5(bytes(t,encoding="utf-8")).hexdigest()#b4046c447614dcbe06d949fe3062a42ar = str(int(round(time.time(),3)*1000))ts = r #1585970420994print(ts)i = ts + str(random.randint(1,10))salt = i #15859705441292sign = hashlib.md5(bytes("fanyideskweb" + word + salt +"Nw(nmmbP%A-r6U3EUn]Aj",encoding="utf-8")).hexdigest()print(sign) #582d24148760d00627461c99907b9476
3请求测试
import requestsimport hashlibimport timeimport random# var t = n.md5(navigator.appVersion),对应浏览器版本t = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"def get_auth_data(keyword): bv = hashlib.md5(bytes(t,encoding="utf-8")).hexdigest() #b4046c447614dcbe06d949fe3062a42a # 70244e0061db49a9ee62d341c5fed82a r = str(int(round(time.time(),3)*1000)) ts = r #1585970420994 i = ts + str(random.randint(1,10)) salt = i #15859705441292 sign = hashlib.md5(bytes("fanyideskweb" + keyword + salt +"Nw(nmmbP%A-r6U3EUn]Aj",encoding="utf-8")).hexdigest() return bv,ts,salt,signdef get_init_cookies(): headers = {"User-Agent": t} res = requests.get("http://fanyi.youdao.com/",headers=headers) cookie_list = [] for cookie in res.cookies: cookie_list.append("%s=%s"%(cookie.name,cookie.value)) return ";".join(cookie_list)def translate(keyword): bv,ts,salt,sign = get_auth_data(keyword) cookies = get_init_cookies() url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" headers = {"Content-Type": "application/x-www-form-urlencoded", "User-Agent": t, "Referer":"http://fanyi.youdao.com/", "Cookie":cookies} data = {"i": keyword, "from": "zh-CHS", "to": "en", "smartresult": "dict", "client": "fanyideskweb", "salt": salt, "sign": sign, "ts": ts, "bv": bv, "doctype": "json", "version": "2.1", "keyfrom": "fanyi.web", "action": "Y_BY_CLICKBUTTION"} res = requests.post(url,params=data,headers=headers) print(res.text) translate("测试")
返回:
{ “translateResult”: [[{ “tgt”: “test”, “src”: “测试” } ]], “errorCode”: 0, “type”: “zh-CHS2en”, “smartResult”: { “entries”: ["", “[试验] test\r\n”, “measurement\r\n”], “type”: 1 } }转载地址:http://itmji.baihongyu.com/