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 相关文章推荐
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
Apr 25 Python
python编写微信远程控制电脑的程序
Jan 05 Python
python中多层嵌套列表的拆分方法
Jul 02 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
python将txt文件读取为字典的示例
Dec 22 Python
pycharm通过ssh连接远程服务器教程
Feb 12 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
如何卸载python插件
Jul 08 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
Nov 10 Python
pandas map(),apply(),applymap()区别解析
Feb 24 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 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
示例详解Laravel重置密码代码重构
2016/08/10 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
QUnit jQuery的TDD框架
2010/11/04 Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
Python+微信接口实现运维报警
2016/08/27 Python
python分布式环境下的限流器的示例
2017/10/26 Python
深入浅析Python的类
2018/06/22 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
应届毕业生自我评价分享
2013/12/15 职场文书
毕业生面试求职信
2014/06/23 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
设备技术员岗位职责
2015/04/11 职场文书
确保工程质量承诺书
2015/04/29 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
Python实现的扫码工具居然这么好用!
2021/06/07 Python