python爬虫实现翻译程序

主要内容:利用python的requests.post作为工具,爬取有道词典的翻译内容
以下是主要代码:

# coding = "utf-8
import requests
import json


# query_str = sys.argv[1]
class YouDaoTranslate:
    def __init__(self):
        self.keep_active = True
        self.acture_mod = False
        self.language_code_dict = {
    
    "1": "ZH_CN2EN", "2": "ZH_CN2JA", "3": "ZH_CN2KR", "4": "ZH_CN2FR",
                                   "5": "ZH_CN2RU", "6": "ZH_CN2SP",
                                   "7": "EN2ZH_CN", "8": "JA2ZH_CN", "9": "KR2ZH_CN", "10": "FR2ZH_CN",
                                   "11": "RU2ZH_CN", "12": "SP2ZH_CN"}
        self.language_code_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
        print("输入“帮助”或者“help”了解更多信息")

    # 获取帮助信息
    def get_help_msg(self):
        print("1.输入“切换翻译模式” --> 重新选择翻译模式")
        print("2.输入“翻转翻译” --> 切换翻译的源和目标语言")
        print("3.输入“结束”或者“exit” --> “退出翻译”")

    #选择翻译模式
    def start(self):
        self.language_code = input("请选择翻译模式:1-> 中英; 2-> 中日; 3-> 中韩; 4-> 中法; 5-> 中俄; 6-> 中西;"
                                   "7-> 英中; 8-> 日中; 9-> 韩中; 10-> 俄中; 11-> 西中 :")
        # 输入正确的翻译方式
        if self.language_code in self.language_code_list:
            print("language_code = ", self.language_code_dict[self.language_code])
            self.type = self.language_code_dict[self.language_code]
            self.acture_mod = True
            # 获取实际翻译类型索引
            self.real_code_index = list(self.language_code_dict.keys()).index(self.language_code)
        #输入的不是正确的翻译模式
        else:
            self.type = self.language_code
            # 查看帮助
            if self.type == "help" or self.type == "帮助":
                self.get_help_msg()
            elif self.type == "结束" or self.type == "exit":
                print("退出翻译!", self.type)
                exit()
            else:
                print("输入有误,请重新输入!")
             #进入死循环,除非输入正确的翻译模式或者退出翻译
            while (self.acture_mod == False):
                code = input("请选择翻译模式:1-> 中英; 2-> 中日; 3-> 中韩; 4-> 中法; 5-> 中俄; 6-> 中西;"
                             "7-> 英中; 8-> 日中; 9-> 韩中; 10-> 俄中; 11-> 西中 :")
                #得到正确的翻译模式
                if code in self.language_code_list:
                    self.type = self.language_code_dict[code]
                    self.acture_mod = True
                #退出翻译
                elif code == "结束" or code == "exit":
                    self.acture_mod = True
                    print("退出翻译!", code)
                    exit()
                #继续循环
                else:
                    print("输入有误,清重新输入")

    # 翻译过程处理
    def process(self):
        headers = {
    
    
            "user-agent": "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36"}
        post_data = {
    
    
            'i': self.trans_content,
            # 'type': 'AUTO',
            'type': self.type,
            # 'from': 'zh',
            # 'to': 'en',
            'smartresult': 'dict',
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'FY_BY_REALTIME'
        }
        post_url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
        r = requests.post(post_url, data=post_data, headers=headers)
        dict_ret = json.loads(r.content.decode())
        ret = dict_ret["translateResult"][0][0]["tgt"]
        print("翻译结果为:", ret)

    # 翻转翻译类型
    def reverse_trans(self):
        if self.real_code_index < 6:
            self.real_code_index = self.real_code_index + 6
        else:
            self.real_code_index = self.real_code_index - 6
        self.type = self.language_code_dict[self.language_code_list[self.real_code_index]]
        print("翻转后的翻译模式为:", self.type)

    def run(self):
        while self.keep_active:
            self.trans_content = input("请输入要翻译的内容:")
            # 判断输入的内容
            if self.trans_content == "帮助" or self.trans_content == "help":
                # 获取帮助信息
                self.get_help_msg()
            elif self.trans_content == "结束" or self.trans_content == "exit":
                # 退出翻译
                self.keep_active = False
                print("退出翻译!", self.trans_content)
                exit
            elif self.trans_content == "切换翻译模式":
                # 切换翻译模式
                self.start()
            elif self.trans_content == "翻转翻译":
                # 翻转翻译模式
                self.reverse_trans()
            else:
                # 开始翻译
                self.process()


if __name__ == '__main__':
    translate = YouDaoTranslate()
    translate.start()
    translate.run()

猜你喜欢

转载自blog.csdn.net/weixin_45444963/article/details/104324109
今日推荐