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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。