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实现竖排打印传单手机号码易撕条
Mar 16 Python
Python处理字符串之isspace()方法的使用
May 19 Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
python自动截取需要区域,进行图像识别的方法
May 17 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
Selenium 滚动页面至元素可见的方法
Mar 18 Python
Python如何将模块打包并发布
Aug 30 Python
Python实战之用tkinter库做一个鼠标模拟点击器
Apr 27 Python
python中的getter与setter你了解吗
Mar 24 Python
python​格式化字符串
Apr 20 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
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
php远程下载类分享
2016/04/13 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
PHP的自定义模板引擎
2017/03/24 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
Vue如何引入远程JS文件
2017/04/20 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
python中实现php的var_dump函数功能
2015/01/21 Python
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
Python random模块用法解析及简单示例
2017/12/18 Python
Python中的延迟绑定原理详解
2019/10/11 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
省级四好少年事迹材料
2014/01/25 职场文书
继承权公证书
2014/04/09 职场文书
十佳家长事迹材料
2014/08/26 职场文书
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle