为什么“ Googletrans.Translator”突然停止工作?

时间:2018-09-21 15:21:46

标签: python python-3.x google-translate language-translation

几天前,我在Googletrans中使用Translator函数编写了几行。但是我今天试图重新运行这些行,但它弹出了一系列错误...我对此感到非常困惑。如果您遇到类似的问题,请在下面发表评论。欢迎任何帮助!

from googletrans import Translator
translator = Translator()
trans1 = translator.translate('Hello', dest = 'es')

我得到的错误如下:

AttributeError                            Traceback (most recent call last)
<ipython-input-19-c0f9e5495a2f> in <module>()
----> 1 trans1 = translator.translate('Hello', dest = 'es')

~\AppData\Local\Continuum\anaconda3\lib\site-packages\googletrans\client.py in translate(self, text, dest, src)
    170 
    171         origin = text
--> 172         data = self._translate(text, dest, src)
    173 
    174         # this code will be updated when the format is changed.

~\AppData\Local\Continuum\anaconda3\lib\site-packages\googletrans\client.py in _translate(self, text, dest, src)
     73             text = text.decode('utf-8')
     74 
---> 75         token = self.token_acquirer.do(text)
     76         params = utils.build_params(query=text, src=src, dest=dest,
     77                                     token=token)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\googletrans\gtoken.py in do(self, text)
    178 
    179     def do(self, text):
--> 180         self._update()
    181         tk = self.acquire(text)
    182         return tk

~\AppData\Local\Continuum\anaconda3\lib\site-packages\googletrans\gtoken.py in _update(self)
     57         r = self.session.get(self.host)
     58         # this will be the same as python code after stripping out a reserved word 'var'
---> 59         code = unicode(self.RE_TKK.search(r.text).group(1)).replace('var ', '')
     60         # unescape special ascii characters such like a \x3d(=)
     61         if PY3:  # pragma: no cover

AttributeError: 'NoneType' object has no attribute 'group'

我试图对此错误消息进行研究,但一无所获。最让我感到困惑的是,这个简单的代码在三天前就可以正常工作了。但是当我今天早上开放时,我弹出错误。请帮忙。非常感谢!

4 个答案:

答案 0 :(得分:2)

我从this链接获得了以下解决方案。

解决方案:

pip install git+https://github.com/BoseCorp/py-googletrans.git --upgrade

对我来说效果很好!

答案 1 :(得分:1)

直接从以下位置复制:googletrans stopped working with error 'NoneType' object has no attribute 'group'

  

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

     

目前正在讨论中,并且已经有一个拉取请求   对其进行修复,因此应在未来几天内解决。

     

有关参考,请参阅:

     

https://github.com/ssut/py-googletrans/issues/48 <-完全相同   Github存储库上报告的问题   https://github.com/pndurette/gTTS/issues/60 <-看似相同的问题   在文字转语音库上   https://github.com/ssut/py-googletrans/pull/78 <-拉动请求以解决   问题

     

要应用此补丁(无需等待请求请求   接受),只需从派生仓库中安装库   https://github.com/BoseCorp/py-googletrans.git(卸载官方   图书馆优先):

     

$ pip卸载googletrans $ git clone   https://github.com/BoseCorp/py-googletrans.git $cd。/py-googletrans$   python setup.py install您可以将其克隆到系统中的任何位置,然后   全局安装或在virtualenv内安装。

答案 2 :(得分:1)

像下面这样更新py-googletrans/googletrans/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 :(得分:0)

Google更改了令牌的创建方式。 撰写本文时尚无解决方法。 您必须等待googletrans更新。