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


Posted in Python onDecember 23, 2020

一. 问题:

在写调用谷歌翻译接口的脚本时,老是报错,我使用的的是googletrans这个模块中Translator的translate方法,程序运行以后会报访问超时错误:

Traceback (most recent call last): File "E:/PycharmProjects/MyProject/Translate/translate_test.py", line 3, in <module> result=translator.translate('안녕하세요.') File "D:\python3\lib\site-packages\googletrans\client.py", line 182, in translate data = self._translate(text, dest, src, kwargs) File "D:\python3\lib\site-packages\googletrans\client.py", line 78, in _translate token = self.token_acquirer.do(text) File "D:\python3\lib\site-packages\googletrans\gtoken.py", line 194, in do self._update() File "D:\python3\lib\site-packages\googletrans\gtoken.py", line 54, in _update r = self.client.get(self.host) File "D:\python3\lib\site-packages\httpx\_client.py", line 763, in get timeout=timeout, File "D:\python3\lib\site-packages\httpx\_client.py", line 601, in request request, auth=auth, allow_redirects=allow_redirects, timeout=timeout, File "D:\python3\lib\site-packages\httpx\_client.py", line 621, in send request, auth=auth, timeout=timeout, allow_redirects=allow_redirects, File "D:\python3\lib\site-packages\httpx\_client.py", line 648, in send_handling_redirects request, auth=auth, timeout=timeout, history=history File "D:\python3\lib\site-packages\httpx\_client.py", line 684, in send_handling_auth response = self.send_single_request(request, timeout) File "D:\python3\lib\site-packages\httpx\_client.py", line 719, in send_single_request timeout=timeout.as_dict(), File "D:\python3\lib\site-packages\httpcore\_sync\connection_pool.py", line 153, in request method, url, headers=headers, stream=stream, timeout=timeout File "D:\python3\lib\site-packages\httpcore\_sync\connection.py", line 65, in request self.socket = self._open_socket(timeout) File "D:\python3\lib\site-packages\httpcore\_sync\connection.py", line 86, in _open_socket hostname, port, ssl_context, timeout File "D:\python3\lib\site-packages\httpcore\_backends\sync.py", line 139, in open_tcp_stream return SyncSocketStream(sock=sock) File "D:\python3\lib\contextlib.py", line 130, in __exit__ self.gen.throw(type, value, traceback) File "D:\python3\lib\site-packages\httpcore\_exceptions.py", line 12, in map_exceptions raise to_exc(exc) from None httpcore._exceptions.ConnectTimeout: timed out

二. 解决方法:

 1.寻找解决方法

经过多方资料查找,最后才知道google翻译对接口进行了更新,之前用的googletrans已经不能用了。但是网上大神已经开发出了新的方法

https://github.com/lushan88a/google_trans_new

在此道一声感谢!

2.使用解决方法

在cmd中输入以下指令即可。

pip install google_trans_new

三. 代码(优化)

from google_trans_new import google_translator
from multiprocessing.dummy import Pool as ThreadPool
import time
import re
"""
此版本调用最新版google_trans_new
使用多线程访问谷歌翻译接口
能够翻译len(text)>5000的文本
"""
class Translate(object):
 def __init__(self):
 	#初始化翻译文本路径以及翻译目标语言
  self.txt_file='./test.txt'
  self.aim_language='zh-CN'
  
	#读入要翻译的文本文件
 def read_txt(self):
  with open(self.txt_file, 'r',encoding='utf-8')as f:
   txt = f.readlines()
  return txt
	
	#进行文本处理,此为优化
 def cut_text(self,text):
  #如果只是一行,就切割成5000字一次来翻译
  if len(text)==1:
   str_text = ''.join(text).strip()
   #筛选是一行但是文本长度大于5000
   if len(str_text)>5000:
    #使用正则表达式切割超长文本为5000一段的短文本
    result = re.findall('.{5000}', str_text)
    return result
   else:
    #如果文本为一行但是这一行文本长度小于5000,则直接返回text
    return text
   """
   如果不止一行,加以判断
    (1)每行字符数都小于5000
   (2)有的行字符数小于5000,有的行字符数大于5000
   """
  else:
   result = []
   for line in text:
    #第(1)种情况
    if len(line)<5000:
     result.append(line)
    else:
     # 第(2)种情况,切割以后,追加到列表中
     cut_str=re.findall('.{5000}', line)
     result.extend(cut_str)
   return result

 def translate(self,text):
  if text:
   aim_lang = self.aim_language
   try:
	   t = google_translator(timeout=10)
	   translate_text = t.translate(text, aim_lang)
	   print(translate_text)
	   return translate_text
   except Exception as e:
    print(e)

def main():
 time1=time.time()
 #开启八条线程
 pool = ThreadPool(8)
 trans = Translate()
 txt = trans.read_txt()
 texts = trans.cut_text(txt)
 try:
  pool.map(trans.translate, texts)
 except Exception as e:
  raise e
 pool.close()
 pool.join()
 time2 = time.time()
 print("一共翻译了 {} 个句子,消耗了 {:.2f} s".format(len(texts),time2 - time1))

if __name__ == "__main__" :
 main()

测试文本我放在了:http://xiazai.3water.com/202012/yuanma/test.rar

可自行下载。

四. 运行结果

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

五. 总结

本篇首先解决了调用googletrans模块的报错问题,然后使用新的google翻译模块编写了代码,并且解决了我这篇文章中翻译文本长度不能大于5000的问题。

Python 相关文章推荐
python计算时间差的方法
May 20 Python
详解详解Python中writelines()方法的使用
May 25 Python
Queue 实现生产者消费者模型(实例讲解)
Nov 13 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
python实现电子书翻页小程序
Jul 23 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
Python实现语音识别和语音合成功能
Sep 20 Python
pytorch模型预测结果与ndarray互转方式
Jan 15 Python
Django中F函数的使用示例代码详解
Jul 06 Python
Python常用库Numpy进行矩阵运算详解
Jul 21 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 Python
python神经网络 使用Keras构建RNN训练
May 04 Python
python音频处理的示例详解
Dec 23 #Python
python 实现客户端与服务端的通信
Dec 23 #Python
python实现excel公式格式化的示例代码
Dec 23 #Python
python 基于opencv实现图像增强
Dec 23 #Python
python接口自动化框架实战
Dec 23 #Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 #Python
python实现发送QQ邮件(可加附件)
Dec 23 #Python
You might like
PHP 文件系统详解
2012/09/13 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
JS解析XML的实现代码
2009/11/12 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
python传递参数方式小结
2015/04/17 Python
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
django实现用户登陆功能详解
2017/12/11 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
参观考察邀请函范文
2014/01/29 职场文书
商场中秋节活动方案
2014/02/07 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
企业年检委托书范本
2014/10/14 职场文书