目的

掌握网络爬虫的基本原理

实现

代码

  import requests
  from requests.exceptions import RequestException
  import tkinter as tk
  from googletrans import Translator
  from baidu import Baidu_Translate
  
  
  class Translate():
      def __init__(self):
          self.window = tk.Tk()  # 创建window窗口
          self.window.title("Davis_翻译小工具")  # 定义窗口名称
          self.window.resizable(0, 0)  # 禁止调整窗口大小
          self.label01 = tk.Label(self.window, text="翻译句子", width=20, font=("Black", -24))
          self.input01 = tk.Entry(self.window, width=60, font="black 24", bg="lightgray")  # 创建一个输入框,并设置尺寸
          self.info01 = tk.Text(self.window, width=60, height=6, font="black 24")  # 创建一个文本展示框,并设置尺寸
          # 添加一个按钮,用于触发翻译功能
          self.t_button01 = tk.Button(self.window, text='翻译', bg='lightblue', relief=tk.RAISED, width=12, height=1,
                                      command=self.fanyi)
  
          self.label02 = tk.Label(self.window, text="翻译词语", width=20, font="black -24")
          self.input02 = tk.Entry(self.window, width=60, font="black 24", bg="lightgray")  # 创建一个输入框,并设置尺寸
          self.info02 = tk.Text(self.window, width=60, height=6, font="black 24")  # 创建一个文本展示框,并设置尺寸
          # 添加一个按钮,用于触发翻译功能
          self.t_button02 = tk.Button(self.window, text='翻译', bg='lightblue', relief=tk.RAISED, width=12, height=1,
                                      command=self.baiduFanyi)
  
          self.label03 = tk.Label(self.window, text="谷歌字典", width=20, font="black -24")
          self.input03 = tk.Entry(self.window, width=60, font="black 24", bg="lightgray")  # 创建一个输入框,并设置尺寸
          self.info03 = tk.Text(self.window, width=60, height=6, font="black 24")  # 创建一个文本展示框,并设置尺寸
          # 添加一个按钮,用于触发翻译功能
          self.t_button03 = tk.Button(self.window, text='翻译', bg='lightblue', relief=tk.RAISED, width=12, height=1,
                                      command=self.googleFanyi)
          # 添加一个按钮,用于触发清空输入框功能
          # self.c_button1 = tk.Button(self.window, text='清空输入', relief=tk.RAISED, width=8, height=1, command=self.cle_e)
          # 添加一个按钮,用于触发清空输出框功能
          # self.c_button2 = tk.Button(self.window, text='清空输出', relief=tk.RAISED, width=8, height=1, command=self.cle)
          # 添加一张图标
          # self.image_file = tk.PhotoImage(file='davisTranslator.png')
  
          # self.label_image = tk.Label(self.window, image=self.image_file)
  
      def gui_arrang(self):
          """完成页面元素布局,设置各部件的位置"""
          self.input01.grid(row=0, column=1, sticky="W", padx=2, pady=2)
          self.t_button01.grid(row=0, column=1, padx=2, pady=2, sticky="E")
          self.label01.grid(row=1, column=0, sticky="W", padx=2, pady=2)
          self.info01.grid(row=1, column=1, padx=2, pady=2)
  
          """完成页面元素布局,设置各部件的位置"""
          self.input02.grid(row=3, column=1, sticky="W", padx=2, pady=2)
          self.t_button02.grid(row=3, column=1, padx=2, pady=2, sticky="E")
          self.label02.grid(row=4, column=0, sticky="W", padx=2, pady=2)
          self.info02.grid(row=4, column=1, padx=2, pady=2)
  
          """完成页面元素布局,设置各部件的位置"""
          self.input03.grid(row=5, column=1, sticky="W", padx=2, pady=2)
          self.t_button03.grid(row=5, column=1, padx=2, pady=2, sticky="E")
          self.label03.grid(row=6, column=0, sticky="W", padx=2, pady=2)
          self.info03.grid(row=6, column=1, padx=2, pady=2)
  
      def fanyi(self):
          """定义一个函数,完成翻译功能"""
          original_str1 = self.input01.get()  # 定义一个变量,用来接收输入框输入的值
          if original_str1 == "":  # 判断用户输入是非为空
              self.info01.delete(1.0, "end")
              self.info01.insert('end', "翻译内容不能为空!")
          else:
              data = {
                  'doctype': 'json',
                  'type': 'AUTO',
                  'i': original_str1  # 将输入框输入的值,赋给接口参数
              }
              url = "http://fanyi.youdao.com/translate"
              try:
                  r = requests.get(url, params=data)
                  if r.status_code == 200:
                      result = r.json()
                      translate_result = result['translateResult'][0][0]["tgt"]
                      self.info01.delete(1.0, "end")  # 输出翻译内容前,先清空输出框的内容
                      self.info01.insert('end', translate_result)  # 将翻译结果添加到输出框中
              except RequestException:
                  self.info01.delete(1.0, "end")
                  self.info01.insert('end', "发生错误")
  
      def baiduFanyi(self):
          try:
              original_str2 = self.input02.get()  # 定义一个变量,用来接收输入框输入的值
              if original_str2 == "":  # 判断用户输入是非为空
                  self.info02.delete(1.0, "end")
                  self.info02.insert('end', "翻译内容不能为空!")
              else:
                  baidu = Baidu_Translate(query_string=original_str2)
                  # baidu.parse_translate_data()
                  self.info02.delete(1.0, "end")  # 输出翻译内容前,先清空输出框的内容
                  self.info02.insert('end', baidu.parse_translate_data())  # 将翻译结果添加到输出框中
          except Exception as e:
              self.info02.delete(1.0, "end")
              self.info02.insert('end', e.args)
  
      def googleFanyi(self):
          try:
              translator = Translator()
              original_str3 = self.input03.get()  # 定义一个变量,用来接收输入框输入的值
              if original_str3 == "":  # 判断用户输入是非为空
                  self.info03.delete(1.0, "end")
                  self.info03.insert('end', "翻译内容不能为空!")
              else:
                  #print(original_str3)
                  #print(detect(original_str3))
                  res = translator.translate(original_str3).text
                  #res = translator.translate(original_str3, dest='zh-cn').text
                  self.info03.delete(1.0, "end")  # 输出翻译内容前,先清空输出框的内容
                  self.info03.insert('end', res)  # 将翻译结果添加到输出框中
          except Exception as e:
              self.info03.delete(1.0, "end")
              self.info03.insert('end', e.args)
              self.info03.insert(1.0, "网络受限")
  
  
  def main():
      t = Translate()
      t.gui_arrang()
      tk.mainloop()
  
  
  if __name__ == '__main__':
      main()