import urllib.request
import urllib.parse
import json
import time
import hashlib
while True:
#sign登录准备阶段 获取content--------------------------------------
content = input("请输入要翻译的内容,0退出:")
if content == '0':
break
#sign登录准备阶段 获取url------------------------------------------
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=dict2.top'
#sign登录准备阶段 获取client---------------------------------------
client = 'fanyideskweb'
#sign登录准备阶段 获取salt-----------------------------------------
salt = str(int(time.time()*1000))
#sign登录准备阶段 获取mkey-----------------------------------------
mkey = "rY0D^0'nM0}g5Mm1z%1G4"
#制作sign信息-------------------------------------------------------
sign = hashlib.md5()
sign.update((client + content + salt + mkey).encode('utf-8'))
#data表单填写-------------------------------------------------------
data = {}
data['i'] = content
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = 'dict'
data['client'] = client
data['salt'] = salt
data['sign'] = sign.hexdigest()
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CLlCKBUTTON'
data['typoResult'] = 'true'
data = urllib.parse.urlencode(data).encode('utf-8')
#encode 硬性编码:将uicode换成其他格式(utf-8)
#headers填写--------------------------------------------------------
head = {}
head['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.87 Safari/537.36 QQBrowser/9.2.5583.400'
#另一种方法
#res.add_headers('key','value')urlopen不能已经指定headers
#head['Host'] = 'fanyi.youdao.com'#未知 这句可以不要
head['Referer'] = 'http://fanyi.youdao.com/'#未知
#访问网页-----------------------------------------------------------
req = urllib.request.Request(url,data,head)
res = urllib.request.urlopen(req)
#不能写成下面的缩略版 原因应该是无法自动转换
#res = urllib.request.urlopen(url,data,head)
html = res.read().decode('utf-8')
#decode 将 utf-8 转换成 unicode
#输出结果-----------------------------------------------------------
target = json.loads(html)
print("翻译结果:%s\n" % (target['translateResult'][0][0]['tgt']))
|