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 相关文章推荐
使用PDB简单调试Python程序简明指南
Apr 25 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
Python实现telnet服务器的方法
Jul 10 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
python读取文本中的坐标方法
Oct 14 Python
详解python中的Turtle函数库
Nov 19 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
使用Python内置模块与函数进行不同进制的数的转换
Apr 26 Python
判断Threading.start新线程是否执行完毕的实例
May 02 Python
python高级特性简介
Aug 13 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 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 mysql数据库操作分页类
2008/06/04 PHP
PHP 判断变量类型实现代码
2009/10/23 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
js获取页面description的方法
2015/05/21 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
Python使用贪婪算法解决问题
2019/10/22 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
TCP/IP模型的分界线
2012/12/01 面试题
迟到检讨书5000字
2014/01/31 职场文书
护理助产毕业生的求职信
2014/03/02 职场文书
爱护公共设施标语
2014/06/24 职场文书
2014年安全生产目标责任书
2014/07/23 职场文书
我的1919观后感
2015/06/03 职场文书
八年级语文教学反思
2016/03/03 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server
详解MySQL中的主键与事务
2021/05/27 MySQL
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android