googletrans перестал работать с ошибкой "NoneType" объект не имеет атрибута "группа"

Я пытался googletrans и это работало довольно хорошо. С этого утра я начал получать ошибки ниже. Я просмотрел несколько постов из stackru и других сайтов и обнаружил, что мой 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'

18 ответов

Решение

По-видимому, это недавняя и широко распространенная проблема на стороне 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,

Обновление 02.12.20: Вышла новая альфа-версия googletrans с исправлением!

Установите альфа-версию следующим образом:

pip install googletrans==3.1.0a0

Важное примечание: вы должны указать URL-адрес службы, иначе возникнет та же ошибка. Итак, это должно работать:

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

Но он по-прежнему возвращает ошибку (по крайней мере, для меня):

translator = Translator()
translator.translate("Der Himmel ist blau und ich mag Bananen", dest='en')

Подробные сведения и обновления см. В обсуждении здесь: https://github.com/ssut/py-googletrans/pull/237

К сожалению, я не мог получить ниgoogletransниgoogle_trans_newработать, несмотря на множество предлагаемых исправлений, которые существуют вокруг.

Мое решение состояло в том, чтобы переключиться наdeep_translatorупаковка:

      pip install -U deep-translator

Затем вы можете использовать его следующим образом:

      >>> from deep_translator import GoogleTranslator
>>> GoogleTranslator(source='auto', target='de').translate("keep it up, you are awesome") 
'weiter so, du bist toll'

См. документацию для получения дополнительной информации.

Попробуйте 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!

К моменту этого ответа вы можете решить эту проблему следующим образом:

Удалите установленную версию

      pip uninstall googletrans

Установите следующую версию

      pip install googletrans==4.0.0rc1

Я надеюсь, что это сработает для вас, как и для меня.

Вы можете попробовать прямо сейчас:

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

Обновленный ответ по состоянию на сентябрь 2021 г.

      pip uninstall googletrans==4.0.0-rc1

pip install googletrans==3.1.0a0

Версия 3.1.0a0 также работает с массовым переводом!

Обновление 10.12.20: Выпущена новая альфа-версия (стабильный релиз-кандидат): 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)

Вот неофициальное решение этой проблемы, как сказал 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

Это сработало для меня:

      pip install googletrans==4.0.0-rc1

Исходный ответ можно найти здесь: https://github.com/ssut/py-googletrans/issues/234#issuecomment-742460612.

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

У меня работали в Win10 и Ubuntu 16 (Python 3.6).

Исправлено здесь 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)

выход: привет ми амиго

googletrans не поддерживается в последней версии Python, поэтому вам нужно удалить его

установить новый googletrans (pip install googletrans==3.1.0a0)

Вот как я решил свою проблему.

      pip3 uninstall googletrans
pip3 install googletrans==3.1.0a0

Сначала вам нужно удалить предыдущую версию и установить версию 3.1.0.

Используйте пакет переводчиков отсюда

  1. Оно работает (;
  2. Поддерживает больше, чем Google

Монтаж:

... pip install translators --upgrade

Применение:

      
    >>> import translators as ts
    Using Israel server backend.
    >>> ts.google('שלום' , to_language = 'es')
    'Hola'
    

Оказывается, вызов в блоке 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)

Если вы используете Google Colab или Jupyter Notebook, запустите:

      !pip uninstall googletrans

Перезапустите среду выполнения, а затем выполните:

      !pip install googletrans==4.0.0rc1

После внесения следующих изменений в 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(=)

Я получил этот фрагмент из билета здесь.

Обратите внимание, что это немного отличается от других изменений, предложенных ранее Керемом.

Для других непосвященных, таких как я, gtoken.py можно найти в AppData \ Local \ Continuum \ anaconda3 \ site-packages \ googletrans на компьютере под управлением Windows с помощью Anaconda. Чтобы найти AppData, перейдите в адресную строку в проводнике, введите "%AppData%" и нажмите Enter.

Попробуйте - pip install googletrans==3.1.0a0

Другие вопросы по тегам