Перейти к основному содержимому

Cheerio на GCP Cloud Functions

Запуск проекта на базе CheerioCrawler в GCP Functions на самом деле довольно прост - нужно внести лишь несколько изменений в код проекта.

Обновление проекта

Сначала создадим проект Crawlee локально с помощью npx crawlee create. Установим поле "main" в файле package.json как "src/main.js".

package.json
{
"name": "my-crawlee-project",
"version": "1.0.0",
"main": "src/main.js",
...
}

Теперь обновим файл main.js, а именно:

  • Передадим отдельный экземпляр Configuration (с опцией persistStorage установленной в false) в конструктор краулера.
src/main.js
import { CheerioCrawler, Configuration } from 'crawlee';
import { router } from './routes.js';

const startUrls = ['https://crawlee.dev'];

const crawler = new CheerioCrawler({
requestHandler: router,
}, new Configuration({
persistStorage: false,
}));

await crawler.run(startUrls);
  • Обернем вызов краулера в отдельную функцию-обработчик. Эта функция:
    • Может быть асинхронной
    • Принимает два позиционных аргумента - req (содержит детали пользовательского запроса к вашей облачной функции) и res (объект ответа, который можно модифицировать)
      • Вызовите res.send(data) для возврата данных из облачной функции
  • Экспортируем эту функцию из модуля src/main.js как именованный экспорт
src/main.js
import { CheerioCrawler, Configuration } from 'crawlee';
import { router } from './routes.js';

const startUrls = ['https://crawlee.dev'];

export const handler = async (req, res) => {
const crawler = new CheerioCrawler({
requestHandler: router,
}, new Configuration({
persistStorage: false,
}));

await crawler.run(startUrls);

return res.send(await crawler.getData())
}

Развертывание в Google Cloud Platform

В панели управления Google Cloud создайте новую функцию, выделите память и процессоры, установите регион и тайм-аут функции.

При развертывании выберите ZIP Upload. Вам нужно создать новый bucket в GCP Storage для хранения zip-пакетов.

Для пакета - вы должны заархивировать все содержимое папки проекта исключая папку node_modules - GCP не использует Layers как AWS Lambda, но самостоятельно настраивает проект на основе файла package.json.

Также убедитесь, что Entry point установлен на имя функции, которую вы экспортировали из src/main.js. GCP берет файл из поля main в package.json.

После развертывания функции вы можете протестировать ее, перейдя на вкладку "Testing". Эта вкладка содержит скрипт curl, который вызывает вашу новую облачную функцию. Чтобы не устанавливать локально приложение CLI gcloud, вы также можете запустить этот скрипт в Cloud Shell, нажав на ссылку над блоком кода.