Google Apps Script: Как получить HTML веб-сайта?

Что такое Google Apps Script и его возможности?

Google Apps Script (GAS) – это облачная платформа для автоматизации задач и расширения функциональности Google Workspace (Sheets, Docs, Gmail и т.д.). GAS позволяет создавать скрипты, которые взаимодействуют с различными сервисами Google и внешними API. Он поддерживает JavaScript и предоставляет удобные библиотеки для работы с данными, электронной почтой, календарями и другими приложениями Google.

Зачем получать HTML веб-сайта с помощью Apps Script?

Получение HTML веб-сайта с помощью GAS открывает множество возможностей:

Автоматизация сбора данных: Извлечение информации о ценах, новостях, акциях с различных веб-сайтов.

Мониторинг изменений: Отслеживание изменений контента на определенных страницах и уведомление об этом.

Интеграция данных: Перенос данных с веб-сайтов в Google Sheets для анализа и отчетности.

Создание собственных API: Получение данных из разных источников и предоставление их в удобном формате.

Обзор методов получения HTML: UrlFetchApp

Основной инструмент для получения HTML в GAS – это класс UrlFetchApp. Он предоставляет методы для отправки HTTP-запросов и получения ответов. UrlFetchApp позволяет отправлять GET, POST, PUT, DELETE и другие типы запросов, настраивать заголовки и payload, а также обрабатывать ответы и ошибки.

Использование UrlFetchApp для получения HTML

Основы UrlFetchApp.fetch()

Метод UrlFetchApp.fetch(url, params) является ключевым для получения HTML. url – это адрес веб-сайта, а params – необязательный объект с настройками запроса.

Пример: получение HTML главной страницы Google

/**
 * Получает HTML главной страницы Google.
 * @return {string} HTML-код страницы.
 */
function getGoogleHomepageHtml(): string {
  try {
    const url: string = 'https://www.google.com/';
    const response: GoogleAppsScript.URL_Fetch.HTTPResponse = UrlFetchApp.fetch(url);
    const html: string = response.getContentText();
    return html;
  } catch (e) {
    Logger.log('Error fetching Google homepage: ' + e);
    return '';
  }
}

Обработка ошибок и исключений (try…catch)

Важно обрабатывать возможные ошибки при получении HTML, такие как недоступность веб-сайта или проблемы с сетью. Используйте try...catch для перехвата исключений и обработки ошибок.

try {
  // Код, который может вызвать ошибку
  const response = UrlFetchApp.fetch(url);
  const html = response.getContentText();
  // Обработка HTML
} catch (e) {
  // Обработка ошибки
  Logger.log('Error: ' + e);
}

Настройка параметров запроса (headers, payload, method)

Можно настроить параметры запроса, передав объект params в UrlFetchApp.fetch(). Например, можно указать заголовки, payload (для POST-запросов) и метод запроса.

const params: GoogleAppsScript.URL_Fetch.URLFetchRequestOptions = {
  'method': 'post',
  'contentType': 'application/json',
  'payload': JSON.stringify({
    'key1': 'value1',
    'key2': 'value2'
  }),
  'headers': {
    'Authorization': 'Bearer ' + accessToken
  }
};

const response: GoogleAppsScript.URL_Fetch.HTTPResponse = UrlFetchApp.fetch(url, params);
const json: string = response.getContentText();

Работа с полученным HTML

Преобразование ответа в строку

Чтобы получить HTML-код, необходимо преобразовать ответ от UrlFetchApp.fetch() в строку с помощью метода getContentText(). Кодировку можно указать явно, например, response.getContentText('UTF-8').

Поиск и извлечение данных из HTML (textContent, регулярные выражения)

GAS не предоставляет встроенных инструментов для парсинга HTML как таковых. Для извлечения данных из HTML можно использовать:

Реклама

textContent: Если HTML содержит текст, который нужно извлечь без тегов.

Регулярные выражения: Для поиска и извлечения конкретных элементов, соответствующих определенному паттерну. Это потребует хорошего знания регулярных выражений.

Для более сложного парсинга HTML рекомендуется использовать сторонние библиотеки парсинга HTML, которые можно подключить к GAS.

Примеры извлечения конкретных элементов (заголовки, ссылки, изображения)

Извлечение заголовков, ссылок и изображений с использованием регулярных выражений – довольно сложная задача и требует точного понимания структуры HTML и использования мощных регулярных выражений. В GAS это обычно не делается напрямую. Обычно данные извлекаются, если они уже находятся в легкодоступной структуре, или используется сторонняя библиотека, как было упомянуто выше.

Продвинутые техники и ограничения

Обход ограничений UrlFetchApp (квоты, таймауты)

UrlFetchApp имеет ограничения по количеству запросов в день и времени выполнения скрипта. Важно учитывать эти ограничения и оптимизировать скрипт для работы в пределах квот. Можно использовать кеширование и пакетную обработку для уменьшения количества запросов. Можно настроить muteHttpExceptions: true в параметрах, чтобы избежать прерывания скрипта при HTTP-ошибках (например, 404).

Работа с динамически генерируемым контентом (JavaScript)

Если контент веб-сайта генерируется динамически с помощью JavaScript, UrlFetchApp получит только исходный HTML-код до выполнения JavaScript. Для получения динамически сгенерированного контента необходимо использовать headless браузеры (например, Puppeteer), которые могут выполнять JavaScript и получать финальный HTML. Однако, Puppeteer не работает непосредственно в GAS. Один из вариантов — использовать облачные сервисы, например Google Cloud Functions, которые могут запускать Puppeteer, и вызывать эти функции из GAS.

Авторизация и аутентификация при получении HTML (OAuth2)

Если для доступа к веб-сайту требуется авторизация, необходимо использовать OAuth2 для получения токена доступа и передачи его в заголовке Authorization запроса. GAS предоставляет удобные библиотеки для работы с OAuth2.

Примеры практического применения

Мониторинг изменений на веб-сайте

Скрипт может периодически получать HTML веб-сайта и сравнивать его с предыдущей версией. Если обнаружены изменения, скрипт может отправлять уведомление по электронной почте.

Автоматическое создание отчетов на основе данных с веб-сайта

Скрипт может получать данные о ценах, количестве товаров и другие данные с веб-сайта и создавать отчеты в Google Sheets.

Интеграция данных с веб-сайтов в Google Sheets

Скрипт может получать данные с веб-сайтов и записывать их в Google Sheets, чтобы использовать эти данные для анализа и визуализации.


Добавить комментарий