有道在线翻译:http://fanyi.youdao.com/
在python3中,使用post提交数据进行翻译,默认中英,可更改语言
按F12 打开开发者工具,在左侧输入“我爱你”翻译,在右侧观察network中提交的post数据Form Data格式,如下
在preview中查看翻译结果,可以看出是字典格式
逻辑关系清楚之后,那么就在python3模拟提交Form Data数据来获取翻译结果吧
data = {\'i\': ‘我爱你’:\'),
\'from\': \'AUTO\',#默认中文
\'to\': \'AUTO\', #默认英文
\'smartresult\': \'dict\',
\'client\': \'fanyideskweb\',
\'salt\': \'\', # 这两个字段空着也行???
\'sign\': \'\',
\'doctype\': \'json\',
\'version\': \'2.1\',
\'keyfrom\': \'fanyi.web\',
\'action\': \'FY_BY_REALTIME\',
\'typoResult\': \'false\'}
其中
i:待翻译的内容
from:默认中文,可改
to:默认英文,可改
salt和sign可以直接粘贴过来,或者研究源码生成的原理(应该是一个随机码一个md5加密码),but经过我测试这两个字段为空也木有问题可以运行
运行结果:
{\'type\': \'ZH_CN2EN\', \'errorCode\': 0, \'elapsedTime\': 2, \'translateResult\': [[{\'src\': \'我爱你\', \'tgt\': \'I love you\'}]]}
附源码:
1 #Author:ZM 2019.7.18 2 \'\'\' 3 利用有道翻译的表单Form Data 格式,交互翻译内容 4 默认形式是中-英 5 测试发现salt和sign可以为空 6 \'\'\' 7 8 import urllib.request 9 import urllib.parse 10 import json 11 12 def translate( data): 13 \'\'\' 14 翻译 15 :param data:<dic> form data 16 :return: None 17 \'\'\' 18 url = \'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule\' 19 data = urllib.parse.urlencode(data).encode(\'utf-8\') 20 r = urllib.request.urlopen(url, data) 21 html = r.read().decode(\'utf-8\') 22 #print(html.strip()) # html是字符串str格式 23 target = json.loads(html) 24 #print(target) # target是字典dict格式 25 print(target[\'translateResult\'][0][0][\'tgt\']) 26 27 if __name__==\'__main__\': 28 29 while True: 30 data = {\'i\': input(\'请输入中文(退出请按 " q "):\'), 31 \'from\': \'AUTO\',#默认中文 32 \'to\': \'AUTO\', #默认英文 33 \'smartresult\': \'dict\', 34 \'client\': \'fanyideskweb\', 35 \'salt\': \'\', # 这两个字段空着也行??? 36 \'sign\': \'\', 37 \'doctype\': \'json\', 38 \'version\': \'2.1\', 39 \'keyfrom\': \'fanyi.web\', 40 \'action\': \'FY_BY_REALTIME\', 41 \'typoResult\': \'false\'} 42 if data[\'i\'] == \'q\': 43 break 44 else: 45 translate(data)