【问题标题】:googletrans stopped working with error 'NoneType' object has no attribute 'group'googletrans 停止使用错误“NoneType”对象没有属性“组”
【发布时间】:2019-02-26 13:47:35
【问题描述】:

我正在尝试googletrans,它工作得很好。从今天早上开始,我开始低于错误。我浏览了 stackoverflow 和其他网站的多个帖子,发现我的 ip 可能被禁止使用该服务一段时间。我尝试使用具有不同 ip 的多个服务提供商互联网仍然面临同样的问题?我还尝试在不同的笔记本电脑上使用googletrans,仍然是同样的问题..googletrans 包坏了还是谷歌最后做了什么?

>>> from googletrans import Translator
>>> translator = Translator()
>>> translator.translate('안녕하세요.')

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    translator.translate('안녕하세요.')
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/googletrans/client.py", line 172, in translate
    data = self._translate(text, dest, src)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/googletrans/client.py", line 75, in _translate
    token = self.token_acquirer.do(text)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/googletrans/gtoken.py", line 180, in do
    self._update()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/googletrans/gtoken.py", line 59, in _update
    code = unicode(self.RE_TKK.search(r.text).group(1)).replace('var ', '')
AttributeError: 'NoneType' object has no attribute 'group'

【问题讨论】:

标签: python


【解决方案1】:

2020 年 1 月 12 日更新:此问题最近再次出现,(显然)再次由 Google 翻译 API 的一些更改引起。

Github issue 正在(再次)讨论解决方案。虽然没有明确的解决方案,但 Pull Request 似乎正在解决问题:https://github.com/ssut/py-googletrans/pull/237

当我们等待它被批准时,它可以像这样安装:

$ pip uninstall googletrans
$ git clone https://github.com/alainrouillon/py-googletrans.git
$ cd ./py-googletrans
$ git checkout origin/feature/enhance-use-of-direct-api
$ python setup.py install

原答案

显然,这是 Google 方面最近普遍存在的问题。 引用各种 Github 讨论,当 Google 直接向您发送原始令牌时会发生这种情况。

现在正在讨论中,已经有一个 pull request 来修复它,所以应该会在接下来的几天内解决。

参考见:

https://github.com/ssut/py-googletrans/issues/48 https://github.com/pndurette/gTTS/issues/60 https://github.com/ssut/py-googletrans/pull/78

要应用此补丁(无需等待拉取请求被接受),只需从分叉的 repo https://github.com/BoseCorp/py-googletrans.git 安装库(首先卸载官方库):

$ pip uninstall googletrans
$ git clone https://github.com/BoseCorp/py-googletrans.git
$ cd ./py-googletrans
$ python setup.py install

您可以在系统上的任何位置克隆它并在全局范围内或在virtualenv 中安装它。

【讨论】:

  • 我想说卸载官方库时出了点问题,安装了修复程序后它对我有用。你熟悉 virtualenv 吗?您可以尝试创建一个干净的虚拟环境,安装拉取请求包,然后再次运行该示例吗?另外,检查您是否真的能够从其网页使用谷歌翻译
  • 不知道,抱歉。我今天遇到了这个问题,并在您的问题旁边找到了解决方法
  • 您的代码副本现在面临这个问题:ValueError: No JSON object could be decoded
  • 由于某些原因,它仅在我添加这样的服务 URL 参数时才有效:translator = Translator(service_urls=['translate.googleapis.com'])
【解决方案2】:

这是针对此问题的非官方解决方案,如 Darkblader24 所述:https://github.com/ssut/py-googletrans/pull/78

像这样更新 gtoken.py:

    RE_TKK = re.compile(r'TKK=eval\(\'\(\(function\(\)\{(.+?)\}\)\(\)\)\'\);',
                        re.DOTALL)
    RE_RAWTKK = re.compile(r'TKK=\'([^\']*)\';',re.DOTALL)

    def __init__(self, tkk='0', session=None, host='translate.google.com'):
        self.session = session or requests.Session()
        self.tkk = tkk
        self.host = host if 'http' in host else 'https://' + host

    def _update(self):
        """update tkk
        """
        # we don't need to update the base TKK value when it is still valid
        now = math.floor(int(time.time() * 1000) / 3600000.0)
        if self.tkk and int(self.tkk.split('.')[0]) == now:
            return

        r = self.session.get(self.host)

        rawtkk = self.RE_RAWTKK.search(r.text)
        if rawtkk:
            self.tkk = rawtkk.group(1)
            return

【讨论】:

  • 另一种解决方案对我不起作用,但这个解决方案对我有用!谢谢!
【解决方案3】:
pip uninstall googletrans googletrans-temp
pip install googletrans-temp

截至 2019.2.24,在 Win10 和 Ubuntu 16 (Python 3.6) 中为我工作 -- 请参阅 https://github.com/ssut/py-googletrans/issues/94 中的回复之一。旧的修复 pip install git+https://github.com/BoseCorp/py-googletrans.git --upgrade 在这里不再起作用。

【讨论】:

  • 在jupyter上工作时需要重启内核。除此之外,效果很好。
  • 可能只需要重新加载,在 Py3 中,例如,import importlib; import googletrans; importlib.reload(googletrans)
  • 对我仍然不起作用:~~~import googletrans as gt translate = gt.Translator() translation = translate.translate('Hello') print(translation.text)~~~ - --> 66 code = unicode(self.RE_TKK.search(r.text).group(1)).replace('var ', '') 67 # 取消转义特殊 ascii 字符,例如 \x3d(=) 68 if PY3: #pragma: no cover AttributeError: 'NoneType' object has no attribute 'group'
【解决方案4】:

固定在这里https://pypi.org/project/py-translator/

$ pip3 install py_translator==1.8.9

from py_translator import Translator
s = Translator().translate(text='Hello my friend', dest='es').text
print(s)

出:你好,我的朋友

【讨论】:

    【解决方案5】:

    对 gtoken 进行以下更改使其对我有用:

    RE_TKK = re.compile(r'tkk:\'(.+?)\'')      
    
    def __init__(self, tkk='0', session=None, host='translate.google.com'):
        self.session = session or requests.Session()
        self.tkk = tkk
        self.host = host if 'http' in host else 'https://' + host
    
    def _update(self):
        """update tkk
        """
        # we don't need to update the base TKK value when it is still valid
        r = self.session.get(self.host)        
    
        self.tkk = self.RE_TKK.findall(r.text)[0]
    
        now = math.floor(int(time.time() * 1000) / 3600000.0)
        if self.tkk and int(self.tkk.split('.')[0]) == now:
            return
    
        # this will be the same as python code after stripping out a reserved word 'var'
        code = unicode(self.RE_TKK.search(r.text).group(1)).replace('var ', '')
        # unescape special ascii characters such like a \x3d(=)
    

    我从票here 中获得了这个sn-p。

    请注意,这与 Kerem 之前建议的其他更改略有不同。

    对于像我这样的其他初学者,可以在使用 Anaconda 的 Windows 机器上的 AppData\Local\Continuum\anaconda3\site-packages\googletrans 中找到 gtoken.py。要查找 AppData,请进入文件资源管理器中的地址栏,键入“%AppData%”,然后按 Enter。

    【讨论】:

      【解决方案6】:

      事实证明,将调用放在 try/except 块中解决了我的问题

      try:
          langs = translator.detect(update.message.text)
          if langs.lang == 'en':
              foo(translator.translate(update.message.text,dest='zh-cn').text)
          else:
              bar(translator.translate(update.message.text,dest='en').text)
      except Exception as e:
          print(e)
      

      【讨论】:

        【解决方案7】:

        06.12.20 更新:发布了带有修复程序的新“官方”Alpha 版 googletrans

        像这样安装 alpha 版本:

        pip install googletrans==3.1.0a0
        

        翻译示例:

        translator = Translator()
        translation = translator.translate("Der Himmel ist blau und ich mag Bananen", dest='en')
        print(translation.text)
        #output: 'The sky is blue and I like bananas'
        

        如果它不起作用,请尝试像这样指定服务 url:

        from googletrans import Translator
        translator = Translator(service_urls=['translate.googleapis.com'])
        translator.translate("Der Himmel ist blau und ich mag Bananen", dest='en')
        

        有关详细信息和更新,请参阅此处的讨论:https://github.com/ssut/py-googletrans/pull/237

        10.12.20 更新:发布了另一个修复程序

        正如@DesiKeki 和@Ahmed Breem 所指出的,还有另一个似乎适用于几个人的修复方法:

        pip install googletrans==4.0.0-rc1
        

        Github 讨论在这里:https://github.com/ssut/py-googletrans/issues/234#issuecomment-742460612

        如果上述修复对您不起作用

        如果上述方法不适合您,google_trans_new 似乎是适合某些人的不错选择。目前尚不清楚为什么上述修复适用于某些人而对其他人无效。在此处查看有关安装和使用的详细信息:https://github.com/lushan88a/google_trans_new

        #pip install google_trans_new
        
        from google_trans_new import google_translator  
        translator = google_translator()  
        translate_text = translator.translate('สวัสดีจีน',lang_tgt='en')  
        print(translate_text)
        #output: Hello china
        

        【讨论】:

        • 对我来说,这也适用于不指定 url。虽然在 en 和 es 之间进行翻译。
        • @Moritz 更新,它突然停止为我工作,返回原始单词而不是西班牙语翻译。不得不切换到 google_trans_new
        • @Moritz 我和@ludgo 有同样的问题。该包工作了 3 天,然后它只返回相同的文本。我尝试输入service_urls,但它给出了著名的错误,即关于令牌和仍然相同的文本。我不确定为什么会发生这种情况,但我在 github 上发布了一个问题。 (链接)[github.com/ssut/py-googletrans/issues/254]
        • @StackOffended:根据 github,贡献者 py-googletrans 和 google_trans_new 不是同一个人。我的另一个朋友安装了上面描述的 py-googletrans alpha 版本,它对他们有用。 (我刚刚又试了一次,它仍然对我有用)。最好的方法可能是尝试 alpha 版本,如果它不适合您,请切换到 google_trans_new。不幸的是,不知道问题出在哪里:/
        • 这为我节省了大量时间,非常感谢! +1
        【解决方案8】:

        试试 google_trans_new。它为我解决了问题 https://github.com/lushan88a/google_trans_new

        pip install google_trans_new

        from google_trans_new import google_translator  
          
        translator = google_translator()  
        translate_text = translator.translate('Hola mundo!', lang_src='es', lang_tgt='en')  
        print(translate_text)
        -> Hello world!
        

        【讨论】:

        • 有什么方法可以从这里获得翻译的信心?我没有找到。 googletrans 能够提供信心。
        【解决方案9】:

        这对我有用:

        pip install googletrans==4.0.0-rc1
        

        原始答案可以在这里找到: https://github.com/ssut/py-googletrans/issues/234#issuecomment-742460612

        【讨论】:

          【解决方案10】:

          更新 10.12.20:新的 Alpha 版本发布(稳定的候选版本)发布:4.0.0-rc1

          可以按如下方式安装:

          pip install googletrans==4.0.0-rc1
          

          用法:

          translation = translator.translate('이 문장은 한글로 쓰여졌습니다.', dest='en')
          print(translation.text)
          >>This sentence is written in Korean.
          detected_lang = translator.detect('mein english me hindi likh raha hoon')
          print(detected_lang)
          >>Detected(lang=hi, confidence=None)
          detected_lang = translator.detect('이 문장은 한글로 쓰여졌습니다.')
          print(detected_lang)
          >>Detected(lang=ko, confidence=None)
          

          【讨论】:

          • 它于 2021 年 7 月 29 日在 Debian 10 上的 Python 3.7.3 中为我工作。谢谢!
          【解决方案11】:

          到此答案时,您可以通过以下方式解决:

          卸载您安装的版本

          pip uninstall googletrans
          

          安装以下版本

          pip install googletrans==4.0.0rc1
          

          我希望这对你有用,因为它对我有用。

          你现在可以试试:

          from googletrans import Translator
          translator = Translator()
          ar = translator.translate('مرحبا').text
          print(ar)
          

          【讨论】:

          • 确认此方法为我解决了问题。谢谢Abdulkarim Malkadi
          • 对我来说它产生了这个错误:AttributeError: 'NoneType' object has no attribute 'group' 任何解决方案?谢谢
          • 这个解决方案有效!!
          • 不适用于批量翻译 :(
          【解决方案12】:

          最新的python不支持googletrans,所以你需要卸载它

          安装新的 googletrans (pip install googletrans==3.1.0a0)

          【讨论】:

            【解决方案13】:

            截至 2021 年 9 月的更新答案

            pip uninstall googletrans==4.0.0-rc1
            
            pip install googletrans==3.1.0a0
            

            3.1.0a0 版本也支持批量翻译!

            【讨论】:

            • 如果其他人正在寻找可行的解决方案,截至 2021 年 12 月是最好的解决方案。
            【解决方案14】:

            这就是我解决问题的方法。

            pip3 uninstall googletrans
            pip3 install googletrans==3.1.0a0
            

            首先需要卸载之前的版本,安装3.1.0版本。

            【讨论】:

              猜你喜欢
              • 2022-01-15
              • 2022-06-30
              • 2015-08-15
              • 1970-01-01
              • 2022-07-20
              • 1970-01-01
              • 2017-09-14
              • 2021-02-17
              相关资源
              最近更新 更多