googletrans перестала работать с ошибкой. Объект "NoneType" не имеет атрибута "group"
Я пытался googletrans
и он работал очень хорошо. С сегодняшнего утра я начал становиться ниже ошибки. Я прошел через несколько сообщений из stackoverflow и других сайтов и обнаружил, что мой ip запрещен для использования службы на некоторое время. Я пробовал использовать несколько интернет-провайдеров услуг, которые имеют разные ip и подходят к той же проблеме? Я также попытался использовать googletrans
на разных ноутбуках, все тот же вопрос. Я 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'
Ответы
Ответ 1
По-видимому, это недавняя и широко распространенная проблема со стороны 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 <- запрос на удаление для исправления проблемы
Чтобы применить этот патч (не дожидаясь принятия запроса на растягивание), просто установите библиотеку из forked 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
.
Ответ 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
Исправлено: 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)
out: Hola mi amigo
Ответ 4
pip uninstall googletrans googletrans-temp
pip install googletrans-temp
Работал для меня в Win10 и Ubuntu 16 (Python 3.6) с 2019.2.24 - см. Один из ответов в https://github.com/ssut/py-googletrans/issues/94. Старый pip install git+https://github.com/BoseCorp/py-googletrans.git --upgrade
исправлений pip install git+https://github.com/BoseCorp/py-googletrans.git --upgrade
больше не работает.
Ответ 5
Обновите py-googletrans/googletrans/gtoken.py
как 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
Ответ 6
Я исправлю это здесь: замените оригинальный gtoken.py
https://github.com/u91win/py-googletrans/blob/master/googletrans/gtoken.py
Ответ 7
Я получил решение ниже по этой ссылке: https://github.com/ssut/py-googletrans/pull/78
Решение:
pip install git+ https://github.com/BoseCorp/py-googletrans.git --upgrade
у меня это сработало отлично.
Ответ 8
После внесения следующих изменений в 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.