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中处理字符串的相关的len()方法的使用简介
May 19 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
详谈python在windows中的文件路径问题
Apr 28 Python
通过python顺序修改文件名字的方法
Jul 11 Python
解决python写入带有中文的字符到文件错误的问题
Jan 31 Python
python实现电子产品商店
Feb 26 Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
matplotlib实现显示伪彩色图像及色度条
Dec 07 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 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
ThinkPHP采用模块和操作分析
2011/04/18 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
php简单的留言板与回复功能具体实现
2014/02/19 PHP
实例讲解PHP面向对象之多态
2014/08/20 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
PHP简单实现防止SQL注入的方法
2018/03/13 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
python使用Matplotlib画条形图
2020/03/25 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
python英语单词测试小程序代码实例
2019/09/09 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
小学生竞选班干部演讲稿
2014/04/24 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
终止合同协议书范本
2016/03/22 职场文书