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基础之函数用法实例详解
Sep 10 Python
python搭建微信公众平台
Feb 09 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
Jul 11 Python
Python模拟随机游走图形效果示例
Feb 06 Python
Sanic框架配置操作分析
Jul 17 Python
python3 中文乱码与默认编码格式设定方法
Oct 31 Python
pandas 透视表中文字段排序方法
Nov 16 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
python 批量修改 labelImg 生成的xml文件的方法
Sep 09 Python
PyCharm导入python项目并配置虚拟环境的教程详解
Oct 13 Python
python 五子棋如何获得鼠标点击坐标
Nov 04 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
Feb 21 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
抓取YAHOO股票报价的类
2009/05/15 PHP
PHP 事务处理数据实现代码
2010/05/13 PHP
优化PHP程序的方法小结
2012/02/23 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
laravel model 两表联查示例
2019/10/24 PHP
DOM 基本方法
2009/07/18 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
Vue.js父与子组件之间传参示例
2017/02/28 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
python编写猜数字小游戏
2019/10/06 Python
python批量处理txt文件的实例代码
2020/01/13 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
Python如何进行时间处理
2020/08/06 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
教师工作表现评语
2014/12/31 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android