import requests, time, random, hashlib, json
class Youdao(object):
def __init__(self, word):
self.url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
self.headers = {
# 注意:这个网站除了UA还需要添加Cookie和Referer,否则会被识别反爬
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',
'Cookie': 'DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; OUTFOX_SEARCH_USER_ID=1018463512@10.110.96.154; JSESSIONID=abchA3lzbYjjyfdg7p68x; OUTFOX_SEARCH_USER_ID_NCOO=2110599486.4131353; _ntes_nnid=36fe24d8afdd8243cd3050bdf3dff458,1645949786934; ___rl__test__cookies=1645949820590',
'Referer': 'https://fanyi.youdao.com/?keyfrom=dict2.top'
}
self.word = word
self.formdata = None
def generate_formdata(self):
# 生成formdata
"""
var r = function(e) {
var t = n.md5(navigator.appVersion),
r = "" + (new Date).getTime(), ## (new Date).getTime()是13位时间戳
i = r + parseInt(10 * Math.random(), 10); ## parseInt(10 * Math.random(), 10)是0-9之间的随机数
return {
ts: r,
bv: t,
salt: i,
sign: n.md5("fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5") ## md5加密
}
};
"""
# 模拟13位的时间戳并转为字符串类型
ts = str(int(time.time() * 1000))
# 模拟随机0-9的数字
salt = ts + str(random.randint(0, 9))
# 组件需要hash的字符串
tempstr = "fanyideskweb" + self.word + salt + "Ygy_4c=r#e#4EX^NUGUc5"
# 创建hash对象
md5 = hashlib.md5()
# hash使用必须是
md5.update(tempstr.encode())
# 按照js要求加密成十六进制
sign = md5.hexdigest()
# 创建formdata
self.formdata = {
'i': self.word,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt,
'sign': sign,
'lts': ts,
'bv': '5e789d5c7fff980bf5f779d3f297e31b',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
# print(self.formdata)
def get_data(self):
# 发起请求获取响应
response = requests.post(url=self.url, headers=self.headers, data=self.formdata)
return response.content
def parse_data(self,data):
# 解析响应数据
json_data = json.loads(data)['translateResult'][0][0]['tgt']
print(json_data)
def run(self):
# url
# headers
# formdata
self.generate_formdata()
# 发送请求获取响应
data = self.get_data()
# print(data)
# 解析数据
# json_data = json.loads(data)['translateResult'][0][0]['tgt']
# print(json_data)
self.parse_data(data)
if __name__ == '__main__':
words = input('请输入您想要翻译的句子或单词:')
youdao = Youdao(words)
# youdao = Youdao('人生苦短,及时行乐')
youdao.run()