python 实现有道翻译功能
初期操作
打开有道翻译界面—F12—Network—在翻译框中输入'hello'—在Network下面发现名为'translate_o?smartresult......'返回翻译之后的数据
分析参数
把所有的RequestHeaders、params都写上尝试爬虫,可以得到结果。
然后RequestHeaders中Headers、Host、Origin、Referer三项留下,Cookie一项经尝试只有OUTFOX_SEARCH_USER_ID=-1927650476@223.97.13.65;会验证而且尝试多次之后我这里是没有变化的。
Accept:application/json,text/javascript,*/*;q=0.01 Accept-Encoding:gzip,deflate Accept-Language:zh-CN,zh;q=0.9 Connection:keep-alive Content-Length:252 Content-Type:application/x-www-form-urlencoded;charset=UTF-8 Cookie:OUTFOX_SEARCH_USER_ID=-1927650476@223.97.13.65;OUTFOX_SEARCH_USER_ID_NCOO=1897197670.972445;JSESSIONID=aaalvPunK-sv2fyR-UjEx;___rl__test__cookies=1612924426799 Host:fanyi.youdao.com Origin:http://fanyi.youdao.com Referer:http://fanyi.youdao.com/ User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.150Safari/537.36 X-Requested-With:XMLHttpRequest
再就是params参数,变化的是salt、sign、lts,尝试后发现lts可有可无,所以变化的只有salt、sign两项。
i:你好 from:AUTO to:AUTO smartresult:dict client:fanyideskweb salt:16129244361391 sign:2820759b6e54f25e0aa94e185e2265e3 lts:1612924436139 bv:3da01a09873456cfb5dba05f2124b148 doctype:json version:2.1 keyfrom:fanyi.web action:FY_BY_REALTlME
分析salt、sign
全局搜索sign,结果中有fanyi.min.js文件,双击进入,然后右键选择'OpeninSourcepanel',搜索'sign',找到如下代码:
define("newweb/common/service",["./utils","./md5","./jquery-1.7"],function(e,t){
varn=e("./jquery-1.7");
e("./utils");
e("./md5");
varr=function(e){
vart=n.md5(navigator.appVersion)
,r=""+(newDate).getTime()
,i=r+parseInt(10*Math.random(),10);
return{
ts:r,
bv:t,
salt:i,
sign:n.md5("fanyideskweb"+e+i+"Tbh5E8=q6U3EXe+&L[4c@")
}
};
可以看出salt是13位时间戳加了一个10以内的随机数,而sign是'固定字符串+e+i+固定字符串',其中i就是salt,而e经过断点调试(我选择在vart=n.md5(navigator.appVersion)这一行加断点,然后输入你好,会出现e='你好')可以得知e为我们要翻译的字符串。这样整个分析过程就结束了。
之后通过爬虫可以得到我们想要的数据,因为返回的是json数据,我们使用.json()来获得返回值更加方便。
Python代码
importhashlib
importrandom
importtime
importrequests
defget_data():
r=str(round(time.time()*1000))
salt=r+str(random.randint(0,9))
content='你好'
data="fanyideskweb"+content+salt+"Tbh5E8=q6U3EXe+&L[4c@"
sign=hashlib.md5()
sign.update(data.encode("utf-8"))
sign=sign.hexdigest()
#print(len(sign))
#print(sign)
returncontent,salt,sign
defsend_request(content,salt,sign):
url='http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
headers={
'Cookie':'OUTFOX_SEARCH_USER_ID=-1927650476@223.97.13.65;',
'Host':'fanyi.youdao.com',
'Origin':'http://fanyi.youdao.com',
'Referer':'http://fanyi.youdao.com/',
'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.146Safari/537.36',
}
data={
'i':str(content),
'from':'AUTO',
'to':'AUTO',
'smartresult':'dict',
'client':'fanyideskweb',
'salt':str(salt),
'sign':str(sign),
#'lts':'1612879546052',
#'bv':'6a1ac4a5cc37a3de2c535a36eda9e149',
#'doctype':'json',
'version':'2.1',
'keyfrom':'fanyi.web',
'action':'FY_BY_REALTlME',
}
res=requests.post(url=url,headers=headers,data=data).json()
print('翻译后:',res['translateResult'][0][0]['tgt'])
print('翻译前:',res['translateResult'][0][0]['src'])
if__name__=='__main__':
content,salt,sign=get_data()
send_request(content,salt,sign)
运行效果
以上就是python实现有道翻译的详细内容,更多关于python有道翻译的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。