zoukankan      html  css  js  c++  java
  • 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 = '
    '.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)
  • 相关阅读:
    2011年需要关注的9大编程语言 狼人:
    微软在华推广Win7拒绝“黑屏” 狼人:
    ifanr访谈:GuruDigger — Web工程师排排坐 狼人:
    10种破除网页设计师障碍的实用方法 狼人:
    英特尔CEO:微软Windows 7是PC更新的催化剂 狼人:
    Windows 7市场份额突破25% XP持续下滑 狼人:
    Office Web Apps中文版正式上线 狼人:
    机器学习实现线性梯度算实现octave
    管理系统数据库sql server 数据库管理
    缓存代码sencha Touch 缓存问题解析
  • 原文地址:https://www.cnblogs.com/hupeng1234/p/7073720.html
Copyright © 2011-2022 走看看