Categories: Python

Как переводить html файлы в python с помощью Google translate api

Попался мне недавно один очень интересный запрос. Нужно переводить большое количество html-страниц, массово, каким-то скриптом. Основная проблема, что кроме контента некоторые данные для перевода находятся внутри тегов. Пожелание было в том, чтобы не использовать google api.

Много проверил модулей, без google api сложно. Либо сами библиотеки завязаны на нем, либо переводит часть. Поэтому использовал апи от гугл. Сам скрипт несложный, но подготовка занимает время и вызывает вопросы.

Настройка google cloud translation api

Как я писал, больше всего проблем вызывает подготовка. Нужно на сайте гугл создать проект, разрешить перевод по апи, сохранить файл с правами доступа. Инструкция есть на сайте https://cloud.google.com/translate/docs/setup , опишу свои действия пошагово.

Создаем проект в google cloud
  1. Переходим в Google Cloud Platform. Нажимаем Создать проект (Create project). Кстати, русский язык в некоторых разделах больше не будет поддерживаться гуглом.

    Нажимаем создать проект в гугл клауд

  2. Пишем Название, только английские буквы, цифры, одинарные кавычки, дефисы, пробелы и восклицательные знаки.

    Создание проекта в google cloud platform. Настройка перед скриптом

  3. Ждем создания… Дальше переходим в проект и копируем Номер проекта. Он нам понадобится потом.

    Копируем Номер проекта в google cloud platform

Включаем Cloud Translation API для проекта
  1. Переходим в Api и сервисы, нажимаем Включить API и Сервисы.

    Включаем Cloud Translation API для перевода html файлов и текста

  2. В поле для поиска вставляем Cloud Translation API.

    Ищем Cloud Translation API

  3. Нажимаем Включить. Может потребовать «Необходимо включить оплату». Переходим, дальше нужно создать платежный аккаунт. Это очень выходить за тему статьи, проблем вызвать не должно.
    Если привязать карту для Вашего региона обязательно, привяжите с лимитом оплаты. Карта не проверяется, дают 300 баксов от гугла на 90 дней для теста. При использовании мною скрипта (около 500 запросов сделал) на счету ничего не изменилось.
Создание учетных записей для Cloud
  1. Заходим Учетные данные (раздел тот же, API и сервисы).
  2. Выбираем Cloud Translation API, ниже я выбрал что не использую API для App Engine или Compute Engine.

    Настройка учетных данных для доступа по Cloud Translation API

  3. Создаем Сервисный аккаунт. Вводим название, выбираем роль Администратор Cloud Translation API. Продолжить. Готово.

    Создать сервисный аккаунт в гугл клауд

  4. Далее переходим по вновь созданному аккаунту, и в разделе Сведения нажимаем Добавить ключ, выбираем json.
    Создаем ключ для доступа по апи

    Создаем json ключ для доступа к google cloud platform

  5. Если все правильно, будет скачан файл. Мы уже близко, подготовка готова на 80%. Держитесь.
Установка google cloud SDK

Дальше нам нужно установить google cloud SDK на Ваш компьютер.

  1. Откройте Powershell и выполните следующую команду:
    (New-Object Net.WebClient).DownloadFile("https://dl.google.com/dl/cloudsdk/channels/rapid/GoogleCloudSDKInstaller.exe", "$env:Temp\GoogleCloudSDKInstaller.exe")
    
    & $env:Temp\GoogleCloudSDKInstaller.exe

    Буден скачан и запустится Установщик Google Cloud SDK.

  2. Логинимся с того гугл аккаунта, где создавали проект в Google Cloud Platform.
  3. Выбираем созданный проект в консоли.

Обычно тут не возникает уже никаких проблем. Конечно, такой путь, можно и запутаться. Я пользовался исключительно документацией от гугл.

Дальше в ход идет сам скрипт на python.

Скрипт на python для перевода html файлов

Особенностью запроса было еще то, что переводить нужно на не обычный язык (английский или русский). Нужно было переводить файлы с русского на казахстанский. Хотя, в принципе, гугл поддерживает очень много языков, а найти код страны не так и трудно.

Установка необходимых компонентов

Ставим через pip google-cloud-translate (для скрипта перевода) и google-cloud-storage (для доступа к cloud translation api).

pip install --upgrade google-cloud-translate
pip install --upgrade google-cloud-storage

И пример кода. Комментарии на английском сохранил с документации, добавил свои на русском.

from google.cloud import translate # Подключаем модуль


def translate_text(text, project_id):
    """Translating Text."""

    client = translate.TranslationServiceClient.from_service_account_json(
        'C:/Users/admino/Downloads/htmlpbdseo-2633gfb0f8.json') # Путь к ключу доступа google cloud api

    location = "global"

    parent = f"projects/{project_id}/locations/{location}"

    # Detail on supported types can be found here:
    # https://cloud.google.com/translate/docs/supported-formats
    response = client.translate_text(
        request={
            "parent": parent,
            "contents": [text],
            "mime_type": "text/html",  # mime types: text/plain, text/html
            "source_language_code": "ru-RU", # Язык с какого переводим, в примере русский
            "target_language_code": "kk", # Язык на какой переводим, в примере казахстанский 
        }
    )

    # Display the translation for each input text provided
    for translation in response.translations:
        # print("Translated text: {}".format(translation.translated_text)) # Если нужно вывести переведенный текст
        with open(file2trans+'_res.htm', 'a', encoding='utf-8') as ff: # Сохранение файла с переводом
            ff.write(translation.translated_text)

file2trans = r'C:\Users\admin\Desktop\bdseo_translate.htm' # Файл для перевода
with open(file2trans, 'r', encoding='utf-8') as fg:
    datas = fg.read()

translate_text(datas, 93544427523) # Функция для перевода, datas - контент, 93544427523 - номер Вашего проекта

Протестировал скрипт 13.02.2021, работает. Пользуетесь — поблагодарите меня через форму справа «На развитие блога bdseo.ru«. Мне будет очень приятно.

Особенности скрипта для перевода файлов

Главный плюс такого решения — оно решало мои задачи (и запрос). Переводило контент, переводило данные в тегах (title=, alt=). Но было несколько нюансов. Не переводило некоторые тексты в meta тегах в head-блоке; а также часть html-комментариев, например:

<!--Текст, который иногда не переводило-->

Возможно, это зависит от языков перевода. Бывают нюансы, как же без них, дополнительная проверка файлов не помешает.

Что касается перевода текстов подобным образом. Если это небольшие части контента, есть другие решения. Это контент html страницы — все зависит от размера текста. Когда текста на тысячи или десятки тысяч символов, то гугл может возвращать ошибку что слишком большой объем. С текстом («mime_type»: «text/plain») такое часто, а с html-файлами ошибку по лимиту не встречал.

При большом количестве файлов используем цикл. Есть вопросы — пишем в комментарии.

veniamin

Recent Posts

Бонус 100 USDT +10 BUSD от Binance

Биржа криптовалют Binance проводит сейчас промо-акцию: новым пользователям дают ваучеры в сумме 110 долларов. Деньги…

2 года ago

Как парсить длительность видео youtube на php в привычном виде

Самый главный момент в работе с youtube - это получить ключ api через консоль разработчика…

2 года ago

Как удалить чужую сессию пользователя в ubuntu (linux)

Арендую сервер для небольшого проекта на python. И вот приходит мне уведомление, что за сутки…

2 года ago

Как наложить watermark на видео в python windows массово

Тестирую одну схему, и нужно на много видео наложить watermark. Решил делать через Python 3,…

3 года ago

Kwork.ru: опыт поиска исполнителя и поздравление

Пришла в голову одна интересная идея. Связанно с тиктоком. Решил поискать исполнителя, который будет монтировать…

3 года ago

Отзыв о Накрутке подписчиков instagram через Socpublic в автоматическом режиме

Решил проверить "автоматическую" накрутку подписчиков в инстаграмме через сервис активной рекламы Socpublic.com. Сразу скажу -…

3 года ago