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服务器与android客户端socket通信实例
Nov 12 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 Python
Python2 Selenium元素定位的实现(8种)
Feb 25 Python
详解Python 切片语法
Jun 10 Python
Python实现简单的列表冒泡排序和反转列表操作示例
Jul 10 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
Aug 02 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
Python Numpy,mask图像的生成详解
Feb 19 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
python 实现图像快速替换某种颜色
Jun 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中将网页导出为Word文档的代码
2012/05/25 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
js 数值项目的格式化函数代码
2010/05/14 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
如何编写jquery插件
2017/03/29 jQuery
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
Vue2.0生命周期的理解
2018/08/20 Javascript
详解基于webpack&amp;gettext的前端多语言方案
2019/01/29 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
数学专业推荐信范文
2013/11/21 职场文书
无工作经验者个人求职信范文
2013/12/22 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python
JAVA springCloud项目搭建流程
2022/05/11 Java/Android