python3 googletrans超时报错问题及翻译工具优化方案 附源码

  • Post category:http

针对这个主题,我将提供以下内容的详细讲解:

  1. python3googletrans超时报错问题原因分析
  2. 翻译工具优化方案
  3. 示例说明及源码

1. python3googletrans超时报错问题原因分析

在使用 python3googletrans 等第三方翻译工具进行文本翻译时,由于对 Google Translate API 接口的请求量过多,很容易出现超时报错的问题。

这个问题的原因往往是因为 Google Translate API 设计有限制,同时也是为了保护其服务的稳定性和正常使用。因此,当某个 IP 或用户在短时间内发送过多请求时,就会被视为不正常的使用行为,并禁止继续使用服务。

2. 翻译工具优化方案

为了解决超时报错问题,我们可以考虑以下优化方案:

2.1 引入延时机制

由于 Google Translate API 频率限制的存在,我们可以考虑使用 Python 的 time 模块,引入延时机制,限制请求的发送速度,以此来减少请求被视为异常行为的概率。

代码示例:

import time
import requests
from googletrans import Translator

translator = Translator()

while True:
    text = input("输入要翻译的中文文本:")
    if text == 'exit':
        break
    try:
        result = translator.translate(text, dest='en')
        print(result.text)
    except requests.exceptions.ReadTimeout:
        time.sleep(1)
        result = translator.translate(text, dest='en')
        print(result.text)

在上面这个示例中,采用了一个 while 循环来不断获取输入的文本,并使用 translator.translate() 方法来进行翻译操作。如果操作过于频繁,请求超时,就使用 time 模块在请求间增加一个 1 秒的延时,以尝试减小频繁错误的可能。

2.2 使用 Google Translate API 的批量申请与缓存机制

Google Translate API 在处理批量请求时有比较强的性能优化能力,也会通过对请求的内容进行缓存,在服务器端减少重复请求的次数。因此,在代码开发时,可以尝试实现请求的批量申请与缓存机制,来避免频繁被服务器拒绝。

代码示例:

import requests
from googletrans import Translator

if __name__ == '__main__':
    translator = Translator(service_urls=['translate.google.cn'])
    text_list = ['你好', '我爱你', '爱情', '生活', '美丽']
    translated_dict = {}

    # 批量发送翻译请求,将结果缓存在字典中
    for text in text_list:
        translated_dict[text] = translator.translate(text, dest='en').text

    # 输出翻译结果
    for key, value in translated_dict.items():
        print(key, ':', value)

在上述代码示例中,我们使用了一个列表来存放多个待翻译的文本,利用 for 循环遍历列表,并使用 translator.translate() 方法来发送翻译请求。将翻译结果存储在字典中,并遍历字典输出翻译结果。这样,相同的翻译请求将被缓存,以减少请求的频率,提高翻译效率。

3. 示例说明及源码

3.1 示例 1:超时重试

在这个示例中,我们采用延时机制,当请求超时时自动重试,以尝试避免频繁出现超时错误的情况。

import time
import requests
from googletrans import Translator

translator = Translator()

while True:
    text = input("输入要翻译的中文文本:")
    if text == 'exit':
        break
    try:
        result = translator.translate(text, dest='en')
        print(result.text)
    except requests.exceptions.ReadTimeout:
        time.sleep(1)
        result = translator.translate(text, dest='en')
        print(result.text)

在这个代码中,我们使用了一个连续的 while 循环用于获取输入的文本,判断是否要退出程序。在使用 translator.translate() 进行翻译时,采用了一个 try...except... 的结构,对请求操作进行包装,当请求出现错误时可以通过 sleep 随机休眠 1 秒来减少一个连接请求被Google暂停的概率。

3.2 示例 2:批量翻译

在这个示例中,我们采用批量申请与缓存机制,来尝试提高翻译效率,减少被服务器拒绝的可能性。

import requests
from googletrans import Translator

if __name__ == '__main__':
    translator = Translator(service_urls=['translate.google.cn'])
    text_list = ['你好', '我爱你', '爱情', '生活', '美丽']
    translated_dict = {}

    # 批量发送翻译请求,将结果缓存在字典中
    for text in text_list:
        translated_dict[text] = translator.translate(text, dest='en').text

    # 输出翻译结果
    for key, value in translated_dict.items():
        print(key, ':', value)

在这个代码中,我们首先创建了一个 Translator 对象,并设置了 service_urls 参数用于设定 Google Translate API 的访问端点。接着定义了一个文本列表,用于存储输入的待翻译文本。然后,我们采用一个 for 循环遍历文本列表,对每个文本进行翻译操作,并将结果存储在一个字典中。最后,我们再遍历字典,输出所有翻译结果。

源代码与相关数据见如下链接: