python 3 googletrans 초 타 임 스 오류 문제 및 번역 도구 최적화 방안 첨부 소스 코드

1.문제:
구 글 번역 인 터 페 이 스 를 호출 하 는 스 크 립 트 를 쓸 때 항상 오류 가 발생 합 니 다.제 가 사용 하 는 것 은 구 글 trans 라 는 모듈 에서 Translator 의 translate 방법 입 니 다.프로그램 이 실 행 된 후에 방문 시간 초과 오 류 를 보고 합 니 다.
Traceback (most recent call last): File "E:/PycharmProjects/MyProject/Translate/translate_test.py", line 3, in 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
2.해결 방법:
 1.해결책 찾기
여러 가지 자 료 를 찾 아 본 결과 구 글 번역 이 인 터 페 이 스 를 업데이트 했다 는 것 을 알 게 되 었 습 니 다.이전에 사 용 했 던 구 글 trans 는 이미 사용 할 수 없습니다.하지만 인터넷 의 대 신 은 이미 새로운 방법 을 개발 했다.
https://github.com/lushan88a/google_trans_new
이 자리 에서 감 사 드 립 니 다!
2.해결책 사용
cmd 에 다음 명령 을 입력 하면 됩 니 다.
pip install google_trans_new
3.코드(최적화)

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.jb51.net/202012/yuanma/test.rar
자체 다운로드 가능.
실행 결과
在这里插入图片描述
총화
이 편 은 먼저 googletrans 모듈 을 호출 하 는 오류 문 제 를 해결 한 다음 에 새로운 google 번역 모듈 로 코드 를 작 성 했 고 이 글 에서 번역 한 텍스트 길이 가 5000 보다 크 지 않 은 문 제 를 해결 했다.

좋은 웹페이지 즐겨찾기