import requests, time, random, hashlib, jsonclass 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()