Cheerio на GCP Cloud Functions
Запуск проекта на базе CheerioCrawler в GCP Functions на самом деле довольно прост - нужно внести лишь несколько изменений в код проекта.
Обновление проекта
Сначала создадим проект Crawlee локально с помощью npx crawlee create
. Установим поле "main"
в файле package.json
как "src/main.js"
.
{
"name": "my-crawlee-project",
"version": "1.0.0",
"main": "src/main.js",
...
}
Теперь обновим файл main.js
, а именно:
- Передадим отдельный экземпляр
Configuration
(с опциейpersistStorage
установленной вfalse
) в конструктор краулера.
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
как именованный экспорт
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, нажав на ссылку над блоком кода.