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实现指定字符串补全空格的方法
Apr 30 Python
教你用python3根据关键词爬取百度百科的内容
Aug 18 Python
Windows环境下python环境安装使用图文教程
Mar 13 Python
Python实现连接MySql数据库及增删改查操作详解
Apr 16 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
Python终端输出彩色字符方法详解
Feb 11 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
如何利用python检测图片是否包含二维码
Oct 15 Python
python在地图上画比例的实例详解
Nov 13 Python
解决python的空格和tab混淆而报错的问题
Feb 26 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函数
2006/10/09 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
JS获取URL中的参数数据
2013/12/05 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
vue异步加载高德地图的实现
2018/06/19 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
Python爬取知乎图片代码实现解析
2019/09/17 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
学徒工职责
2014/03/06 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年教育工作总结
2014/11/26 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
js Proxy的原理详解
2021/05/25 Javascript
让文件路径提取变得更简单的Python Path库
2021/05/27 Python
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js