python "爬虫+有道词典"实现一个简单翻译程序
Posted wanlifeipeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python "爬虫+有道词典"实现一个简单翻译程序相关的知识,希望对你有一定的参考价值。
抓包软件使用的是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)
以上是关于python "爬虫+有道词典"实现一个简单翻译程序的主要内容,如果未能解决你的问题,请参考以下文章