第一步,构建基础代码:
import requests #导入requests包
import json
def Youdao(word):
# word = "'"+word+"'"
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
From_data={'i':word,'from':'AUTO','to':'AUTO','smartresult':'dict','client':'fanyideskweb','salt':'15771662361059','sign':'cd08e8e8d838142b25534e3ab6e805bf','ts':'1577166236105','bv':'dcce310221b79182a6290867a2a1e683','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_CLICKBUTTION'}
#请求表单数据
cookie = 'P_INFO=m15617391675@163.com|1575858899|0|other|00&99|shh&1574129903&other#shh&null#10#0#0|156675&1||15617391675@163.com; OUTFOX_SEARCH_USER_ID=742927111@10.169.0.83; JSESSIONID=aaaore6JRqqxBgn1hB28w; OUTFOX_SEARCH_USER_ID_NCOO=1861571491.0418134; ___rl__test__cookies=1577166236100'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36",
'Referer': 'http://fanyi.youdao.com/',
'Cookie': cookie
}
response = requests.post(url,data=From_data,headers=headers)
#将Json格式字符串转字典
content = json.loads(response.text)
print(content)
#打印翻译后的数据
print(content['translateResult'][0][0]['tgt'])
if __name__=='__main__':
word = '中国'
Youdao(word)
发现报错
{'errorCode': 50}
第二步:查找报错信息
可以发现
'salt':'15771662361059','sign':'cd08e8e8d838142b25534e3ab6e805bf','ts':'1577166236105'
这三个参数均为MD5加密后的,且随时随地会变
立刻明白肯定经过js加密过了,然后去看
搜了一下果然有啊
r = int(time.time() * 1000)
i = int(time.time() * 1000) + random.randint(0, 10)
sign = "fanyideskweb" + 你输入查找的名字+i + n%A-rKaT5fb[Gy?;N5@Tj
最终结果如下:
import hashlib
import random
import time
import requests
import json
class Youdao:
def __init__(self, word):
self.word = word
self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
self.D = "n%A-rKaT5fb[Gy?;N5@Tj"
self.salt = self.get_salt()
self.sign = self.get_sign()
self.ts = self.get_ts()
def get_md(self, value):
# md5加密
m = hashlib.md5()
m.update(value.encode('utf-8'))
return m.hexdigest()
def get_salt(self):
# 根据当前时间戳获取salt参数
s = int(time.time() * 1000) + random.randint(0, 10)
return str(s)
def get_sign(self):
# 使用md5函数和其他参数,得到sign参数
s = "fanyideskweb" + self.word + self.salt + self.D
return self.get_md(s)
def get_ts(self):
# 根据当前时间戳获取ts参数
s = int(time.time() * 1000)
return str(s)
def get_result(self):
Form_Data = {
'i': self.word,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': self.salt,'sign': self.sign,'ts': self.ts,'bv': 'c6b8c998b2cbaa29bd94afc223bc106c','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_CLICKBUTTION'
}
cookie = 'P_INFO=m15617391675@163.com|1575858899|0|other|00&99|shh&1574129903&other#shh&null#10#0#0|156675&1||15617391675@163.com; OUTFOX_SEARCH_USER_ID=742927111@10.169.0.83; JSESSIONID=aaaore6JRqqxBgn1hB28w; OUTFOX_SEARCH_USER_ID_NCOO=1861571491.0418134; ___rl__test__cookies=1577166236100'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
'Referer': 'http://fanyi.youdao.com/',
'Cookie': cookie
}
response = requests.post(self.url, data=Form_Data, headers=headers).text
translate_results = json.loads(response)
# 找到翻译结果
if 'translateResult' in translate_results:
translate_results = translate_results['translateResult'][0][0]['tgt']
print("翻译的结果是:%s" % translate_results)
else:
print(translate_results)
if __name__ == "__main__":
y = Youdao('我爱中国')
y.get_result()
参考多位大佬写的,其实我也不会