googletrans停止处理错误“ NoneType”对象没有属性“组”

时间:2018-09-22 10:29:08

标签: python

我正在尝试googletrans,并且运行良好。从今天早上开始,我开始遇到错误。我浏览了来自stackoverflow和其他网站的多个帖子,发现可能我的ip被禁止使用该服务一段时间。我尝试使用具有不同ip和stil的多个服务提供商Internet面临同一问题?我还尝试在不同的笔记本电脑上使用googletrans,仍然是同一问题。.googletrans的包装是否损坏或google到底做了什么?

>>> 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'

12 个答案:

答案 0 :(得分:25)

显然,这是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 uninstall googletrans
$ git clone https://github.com/BoseCorp/py-googletrans.git
$ cd ./py-googletrans
$ python setup.py install

您可以将其克隆到系统上的任何位置,然后在全局范围内或在virtualenv内安装。

答案 1 :(得分:20)

更新06.12.20:带有修复程序的googletrans新的“正式” alpha版本发布了!

按如下所示安装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'

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

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

更新08.12.20-如果googletrans的Alpha版本不适合您

如果以上方法都不适合您,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

答案 2 :(得分:10)

这是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 :(得分:9)

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)

答案 4 :(得分:7)

尝试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!

答案 5 :(得分:6)

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

$ pip3 install py_translator == 1.8.9

style="background-image: url("Stock/uploads/<?php echo $row ["image_location"]; ?>");
  

out:Hola mi amigo

答案 6 :(得分:5)

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在这里不再起作用。

答案 7 :(得分:2)

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

卸载您已安装的

版本
pip uninstall googletrans

安装以下版本

pip install googletrans==4.0.0rc1

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

你现在可以试试:

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

答案 8 :(得分:1)

事实证明,将呼叫放在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)

答案 9 :(得分:0)

对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中获得了此摘要。

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

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

答案 10 :(得分:0)

这对我有用:

pip install googletrans==4.0.0-rc1

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

答案 11 :(得分:0)

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

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