googletrans 停止工作,错误为“NoneType”对象没有属性“group”
- 2025-01-15 08:45:00
- admin 原创
- 89
问题描述:
我试过了googletrans
,运行得很好。从今天早上开始,我开始收到以下错误。我查看了 stackoverflow 和其他网站上的多个帖子,发现我的 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'
解决方案 1:
更新 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
更新 10.12.20:发布了另一个修复程序
正如 @DesiKeki 和 @Ahmed Breem 指出的那样,还有另一种修复方法似乎对一些人有效:
pip install googletrans==4.0.0-rc1
Github 讨论在这里: https: //github.com/ssut/py-googletrans/issues/234#issuecomment-742460612
如果上述修复方法对你不起作用
如果上述方法对您不起作用,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:
更新于 2020 年 1 月 12 日:此问题最近再次出现,(显然)再次由 Google 翻译 API 的一些更改引起。
Github 问题中再次讨论了解决方案。尽管目前还没有明确的解决方案,但 Pull 请求似乎正在解决这个问题:https://github.com/ssut/py-googletrans/pull/237。
在等待其获得批准时,我们可以像这样安装:
$ pip uninstall googletrans
$ git clone https://github.com/alainrouillon/py-googletrans.git
$ cd ./py-googletrans
$ git checkout origin/feature/enhance-use-of-direct-api
$ python setup.py install
原始答案:
显然这是 Google 最近发现的一个普遍问题。引用 Github 上的各种讨论,当 Google 直接向您发送原始令牌时就会发生这种情况。
现在正在讨论这个问题,并且已经有一个修复它的拉取请求,所以它应该在接下来的几天内得到解决。
供参考,请参阅:
https://github.com/ssut/py-googletrans/issues/48 <-- 与 Github repo 上报告的问题完全相同
https://github.com/pndurette/gTTS/issues/60 <-- 文本转语音库上似乎存在同样的问题
https://github.com/ssut/py-googletrans/pull/78 <-- 提交请求以修复该问题
要应用此补丁(无需等待拉取请求被接受),只需从分叉的 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
.
解决方案 3:
不幸的是,尽管提出了许多修复建议,但我还是无法得到它们,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'
请参阅文档以了解更多信息。
解决方案 4:
尝试 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:
到这个答案时,您可以用以下方法解决它:
卸载已安装的版本
pip uninstall googletrans
安装以下版本
pip install googletrans==4.0.0rc1
我希望这对你也有效,就像对我有用一样。
您现在可以尝试一下:
from googletrans import Translator
translator = Translator()
ar = translator.translate('مرحبا').text
print(ar)
注意4.0.0rc1使用的是旧版本httpx
,如果您遇到与此相关的错误,则需要编辑文件client.py,修复httpcore.SyncHTTPTransport
为httpcore.AsyncHTTPProxy
。
解决方案 6:
截至 2021 年 9 月的更新答案
pip uninstall googletrans==4.0.0-rc1
pip install googletrans==3.1.0a0
3.1.0a0 版本也支持批量翻译!
解决方案 7:
更新 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)
解决方案 8:
以下是 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
解决方案 9:
这对我有用:
pip install googletrans==4.0.0-rc1
原始答案可以在这里找到:
https: //github.com/ssut/py-googletrans/issues/234#issuecomment-742460612
解决方案 10:
修复在这里https://pypi.org/project/py-translator/
$ pip3 安装 py_translator==1.8.9
from py_translator import Translator
s = Translator().translate(text='Hello my friend', dest='es').text
print(s)
出:你好,我的朋友
解决方案 11:
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
在这里不再起作用。
解决方案 12:
最新的 Python 不支持 googletrans,因此你需要卸载它
安装新的 googletrans ( pip install googletrans==3.1.0a0)
解决方案 13:
这就是我解决问题的方法。
pip3 uninstall googletrans
pip3 install googletrans==3.1.0a0
首先需要卸载以前的版本,然后安装3.1.0版本。
解决方案 14:
使用此处的翻译包
有用 (;
支持谷歌以外的更多平台
安装:
pip install translators --upgrade
用法:
>>> import translators as ts
Using Israel server backend.
>>> ts.google('שלום' , to_language = 'es')
'Hola'
解决方案 15:
对 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(=)
我从这里的票上获得了这个片段。
请注意,这与 Kerem 之前建议的其他更改略有不同。
对于像我一样的新手,可以在使用 Anaconda 的 Windows 计算机上的 AppData\Local\Continuum\anaconda3\site-packages\googletrans 中找到 gtoken.py。要查找 AppData,请进入文件资源管理器中的地址栏,输入“%AppData%”,然后按 Enter。
解决方案 16:
事实证明,将调用放在 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)
解决方案 17:
如果您正在使用 Google Colab 或 Jupyter Notebook,请运行:
!pip uninstall googletrans
重启运行时,然后执行:
!pip install googletrans==4.0.0rc1
解决方案 18:
尝试-pip install googletrans==3.1.0a0