抓包软件使用的是Fiddler4
新版的查询接口 比较负责,引入了salt和sign
http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&sessionFrom=http://fanyi.youdao.com/
这里使用老版本的查询接口
http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=http://www.youdao.com/
代码:
# coding=utf-8 import urllib import urllib2 import json \'\'\' 功能说明: 根据输入要翻译的文字,进行有道自动翻译: 实现中文->英文、英语及其他语言->中文的转换 \'\'\' class YoudaoFanyi: def __init__(self): self.url = \'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=http://www.youdao.com/\' self.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36", } def get_encoded_payload(self, key): \'\'\' :param key: 带翻译的文字 :return: 返回url编码过的数据 \'\'\' payload = { "i": key, \'type\': \'AUTO\', "doctype": "json", "xmlVersion": "1.8", "keyfrom": "fanyi.web", "action": "FY_BY_CLICKBUTTON", "typoResult": "true", "ue": "UTF-8" } data = urllib.urlencode(payload) return data def show_translate_result(self, html): \'\'\' 解析返回的json数据 :param html: 返回的json数据 :return: None \'\'\' data = json.loads(html) print \'*\' * 10 target = data[\'translateResult\'][0][0][\'tgt\'] print target if \'smartResult\' in data: result = data[\'smartResult\'][\'entries\'] result_str = \'\n\'.join(result[1:]) # result列表中第一个元素为"" print \'有道词典结果\' print result_str print \'*\' * 10 def translate(self, content): \'\'\' 对输入的内容进行翻译 :param content: 带翻译的内容 :return: None \'\'\' payload = self.get_encoded_payload(content) # 获取经过url编码后的数据 request = urllib2.Request( self.url, data=payload, headers=self.headers) # 构造请求 response = urllib2.urlopen(request) # 发送请求 self.show_translate_result(response.read()) # 解析结果 if __name__ == \'__main__\': youdao = YoudaoFanyi() while True: key = raw_input("请输入你要翻译的文字[Q|quit 退出]: ").strip() if key in [\'Q\', \'quit\']: break youdao.translate(key)