浅析Python谷歌翻译库的核心

2021/10/3 1:11:11

本文主要是介绍浅析Python谷歌翻译库的核心,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

随着现在谷歌翻译的准确度越来越高,大部分人们不约而同的选择了谷歌翻译。对于Python而言,现在的googletrans可谓是使用的很顺心。对于googletrans这个库的client文件中的Translator类的translate方法,我在此简单剖析以下:首先对语种进行判断,判断是否在语言库里,然后生成data参数【以前访问谷歌还需要g_tk参数计算,不知道为什么访问起来越来越简单了】,谷歌的请求界面采用POST方法,一些参数暂时不变,唯一变的是data中的f.req参数,他由原文、原语种、目标语种组成,自己实现就是:

json.dumps([[['MkEWBc', json.dumps([[text, src, des, True], [None]]), None, 'generic']]])
  

然后直接POST得到了结果,比较麻烦的就是对返回结果的处理,但多用几次根据规律还是很好得到具体处理方案的:

  
    
     
    
    
     
      for row 
      in res.text.split(
      '\n'):
     
    
    
     
    
    
         
      try:
     
    
    
     
    
    
             
      try:
     
    
    
     
    
    
     
                  data = eval(eval(row.replace(
      'null', 
      'None').replace(
      'true', 
      'True').replace(
      'false', 
      'False'))[
      0][
      2])
     
    
    
     
    
    
                 
      # 获取原语种
     
    
    
     
    
    
                 
      if src == 
      'auto':
     
    
    
     
    
    
                     
      try:
     
    
    
     
    
    
     
                          src = data[
      2]
     
    
    
     
    
    
                     
      except IndexError:
     
    
    
     
    
    
                         
      pass
     
    
    
     
    
    
                 
      if src == 
      'auto':
     
    
    
     
    
    
                     
      try:
     
    
    
     
    
    
     
                          src = data[
      0][
      2]
     
    
    
     
    
    
                     
      except IndexError:
     
    
    
     
    
    
                         
      pass
     
    
    
     
    
    
     
                  print(
      f"原语种:{src},原文:\n{text}\n\n翻译语种:{des},翻译文:\n{(' 'if data[1][0][0][3] else '').join([_[0] for _ in data[1][0][0][5]])}")
     
    
    
     
    
    
                 
      break
     
    
    
     
    
    
             
      except IndexError:
     
    
    
     
    
    
                 
      pass
     
    
    
     
    
    
             
      except TypeError:
     
    
    
     
    
    
                 
      pass
     
    
    
     
    
    
         
      except SyntaxError:
     
    
    
     
    
    
             
      pass
     
    
    
     
    
    
     
      else:
     
    
    
     
    
    
     
          print(
      '未获取正确的翻译结果!')
     
    
  

连json都不用直接eval获取列表就可以了,通过异常判断获取所需要的有结果的那行,把这些综合在一起,写成一个不考虑语言、不依赖除requests其他第三方库的简单程序就是:

  
    
     
    
    
     
      # _*_ coding:utf-8 _*_
     
    
    
     
    
    
     
      # FileName: google_translate.py
     
    
    
     
    
    
     
      # IDE: PyCharm
     
    
    
     
    
    
     
      # 菜菜代码,永无BUG!
     
    
    
     
    
    
      
     
    
    
     
    
    
     
      import json
     
    
    
     
    
    
     
      import requests
     
    
    
     
    
    
      
     
    
    
     
    
    
     
      text = 
      '苹果\n香蕉'  
      # 待翻译文本
     
    
    
     
    
    
     
      src = 
      'auto'  
      # 原文本语种
     
    
    
     
    
    
     
      des = 
      'en'  
      # 翻译文语种
     
    
    
     
    
    
      
     
    
    
     
    
    
     
      res = requests.post(
     
    
    
     
    
    
     
          url=
      "https://translate.google.cn/_/TranslateWebserverUi/data/batchexecute?rpcids=MkEWBc&bl=boq_translate-webserver_20210929.09_p0&hl=zh-CN&soc-app=1&soc-platform=1&soc-device=1&rt=c",
     
    
    
     
    
    
     
          data={
      "f.req": json.dumps([[[
      'MkEWBc', json.dumps([[text, src, des, 
      True], [
      None]]), 
      None, 
      'generic']]])}
     
    
    
     
    
    
     
      )
     
    
    
     
    
    
      
     
    
    
     
    
    
     
      for row 
      in res.text.split(
      '\n'):
     
    
    
     
    
    
         
      try:
     
    
    
     
    
    
             
      try:
     
    
    
     
    
    
     
                  data = eval(eval(row.replace(
      'null', 
      'None').replace(
      'true', 
      'True').replace(
      'false', 
      'False'))[
      0][
      2])
     
    
    
     
    
    
                 
      # 获取原语种
     
    
    
     
    
    
                 
      if src == 
      'auto':
     
    
    
     
    
    
                     
      try:
     
    
    
     
    
    
     
                          src = data[
      2]
     
    
    
     
    
    
                     
      except IndexError:
     
    
    
     
    
    
                         
      pass
     
    
    
     
    
    
                 
      if src == 
      'auto':
     
    
    
     
    
    
                     
      try:
     
    
    
     
    
    
     
                          src = data[
      0][
      2]
     
    
    
     
    
    
                     
      except IndexError:
     
    
    
     
    
    
                         
      pass
     
    
    
     
    
    
     
                  print(
      f"原语种:{src},原文:\n{text}\n\n翻译语种:{des},翻译文:\n{(' 'if data[1][0][0][3] else '').join([_[0] for _ in data[1][0][0][5]])}")
     
    
    
     
    
    
                 
      break
     
    
    
     
    
    
             
      except IndexError:
     
    
    
     
    
    
                 
      pass
     
    
    
     
    
    
             
      except TypeError:
     
    
    
     
    
    
                 
      pass
     
    
    
     
    
    
         
      except SyntaxError:
     
    
    
     
    
    
             
      pass
     
    
    
     
    
    
     
      else:
     
    
    
     
    
    
     
          print(
      '未获取正确的翻译结果!')
     
    
  

简单点写成函数就可以任由自己使用了,这不到40行的代码是不是能让你心动呢~



这篇关于浅析Python谷歌翻译库的核心的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程