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.
Используйте пакет переводчиков отсюда
- Оно работает (;
- Поддерживает больше, чем 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.