googletrans перезапускает цикл for после 50 элементов - PullRequest
0 голосов
/ 27 апреля 2019

Мне нужен цикл для перезапуска, потому что я ограничен тем, сколько элементов я могу обработать, прежде чем Google заблокирует меня с помощью модуля googletrans.

Я понял, что могу получить около пятидесяти элементов, используя произвольную задержку, пока Google не заблокирует меня, но мне нужно, чтобы он прошел около 850.

Насколько я знаю, нет способа перезапустить цикл, поэтому я попробовал цикл while, но он не видел обновления цикла и завершает работу после обработки первого блока.

Я также произвольно устанавливаю второй интервал между переводами, чтобы цикл работал. он идет от 0 до 50, а затем останавливает петли

мой код

from googletrans import Translator
from random import randint
import datetime

should_restart = True
spanish_subs = get_subs(page)# list of over 850 sentances to be translated
counter_num = 1   
translator = Translator()
start_block = 0
end_block = 50

while should_restart:

print('start_block ' + str(start_block))# see where the loop is in the process
print('end_block  ' + str(end_block))

if end_block < len(get_subs(page)):
  translations = translator.translate(spanish_subs[start_block:end_block], src='es')    

  for translation in translations:           
      english_subs.append(translation.text)
      print('Loop ' + str(counter_num + 1 ))
      time.sleep(random())# pauses between 1 and 10 seconds

if end_block >= len(get_subs(page)):
  should_restart = False

  with open('englist_translation.txt', 'w') as f:
    for item in english_subs:
      f.write("%s\n" % item)
      print('Finished')


start_block = end_block + 50
end_block = end_block + 50 # date the end block
print(english_subs)# print to console to see what was translated
return english_subs

def random():
  random_number = randint(0, 10)
  return random_number

1 Ответ

0 голосов
/ 27 апреля 2019

Эта настройка поможет вам преодолеть ограничения Googles, это медленный процесс, но он работает со списком из 50 000 символов.

from random import randint
import time
from googletrans import Translator


def get_script_eng():

    should_restart = True
    spanish_subs = get_subs(page)  

    counter_num = 1   
    translator = Translator()
    start_block = 0
    end_block = 50

    while end_block < len(get_subs(page)):


    print('start_block ' + str(start_block))
    print('end_block  ' + str(end_block))

    if should_restart  == True:
      translations = translator.translate(spanish_subs[start_block:end_block], src='es')

      for translation in translations:           
        english_subs.append(translation.text)
        time.sleep(random()) 
      print('translation ' + str(counter_num + 1 ))

    else:
      should_restart = False
      with open('spanish.txt', 'w') as f:
        for item in english_subs:
          f.write("%s\n" % item)
          print('Finished')
    start_block = start_block + 50
    end_block = end_block + 50
    print(english_subs)
  return english_subs

И затем для генерации случайной задержки

def random():
  random_number = randint(0, 10)
  return random_number
...