Используйте Lovable для интерфейса, Supabase для аутентификации и хранения, а серверный сервис скрапин га - для загрузки страниц. Начните с одного проверенного URL на запрос, отдавайте результаты с привязкой к первоисточнику и настройте квоты, прежде чем подключать краулинг или AI-экстракцию.
Веб-скрейпер на Lovable можно собрать в три шага: сгенерировать интерфейс, подключить бэкенд на Supabase и вызывать API скрейпинга из серверной функции. Ключи API и логику запросов нельзя оставлять в браузере. В этом руководстве мы создадим одностраничный скрейпер с сохранением результатов, экспортом в CSV и лимитами, которые не позволят маленькой утилите превратиться в огромный счет за инфраструктуру.
Что получится в итоге и сколько это стоит
Собираем инструмент для точечного ресерча, а не универсальную краулинг-платформу. Авторизованный пользователь отправляет один разрешенный публичный URL, получает заголовок страницы и извлеченный текст, а также может скачивать историю результатов.
Для версии руководства за октябрь 2026 года стек выглядит так: Lovable, Supabase и Firecrawl. Тарифы провайдеров и экраны интеграций постоянно меняются, поэтому мы настроим прямое серверное подключение к API, а не будем полагаться на конкретные кнопки в меню Lovable.
Путь запроса предельно простой:
`Browser -> authenticated backend function -> Firecrawl -> saved result -> browser`
Lovable собирает приложение. Supabase отвечает за аккаунты, записи в базе данных и серверную функцию. Firecrawl скачивает страницу и превращает ее содержимое в удобный формат. Чтобы вытащить заголовок и текст страницы, AI-модель не нужна.
Первая версия должна быть намеренно минималистичной
Один запрос - один URL. Ограничьте доступ несколькими приглашенными тестировщиками. Разрешите сбор только с тех доменов, которыми владеете сами или на которые получили прямое разрешение.
Не добавляйте рекурсивный обход страниц, регулярный мониторинг по расписанию, поддержку страниц с авторизацией или ротацию прокси. Каждая из этих задач кардинально усложняет проект. Скрейпер, который отлично вытягивает данные из вашей документации, не превратится сам по себе в надежный сервис для слежки за конкурент ами.
Если нужен более узкий сценарий, загляните в библиотеку идей для приложений. Инструмент для инвентаризации документации или каталога проверенных поставщиков проверить на практике куда проще, чем концепт "скрейпинг всего интернета".
Спланируйте время и бюджет до написания промптов
Это ориентировочные оценки для небольшого пилота, а не актуальный прайс-лист сервисов.
| Задача | Примерное время | Расчет бюджета | |---|---|---| | Интерфейс и авторизация | 45-90 минут | Расходует лимит сборок Lovable | | База данных и интеграция бэкенда | 90-180 минут | Небольшой пилот может уложиться в бесплатные лимиты | | Безопасность, тесты на сбои и CSV | 90-180 минут | В основном время на разработку | | Расходы на скрейпинг | Зависит от страниц | Заложите $5-$20 на пилотное тестирование | | Итого для первого рабочего пилота | 4-8 часов | Рассчитывайте на $30-$100 в первый месяц |
Новичку лучше заложить на это выходные. Минимальные платные тарифы, хостинг, налоги или сложный целевой сайт могут увеличить итоговую сумму. Прежде чем начинать, проверьте руководство по ценам Lovable и страницы с тарифами каждого провайдера.
Для оценки емкости: 10 тестировщиков, делающих по 10 запросов в день, дают 3 000 запросов в месяц. Но это не обязательно 3 000 оплачиваемых кредитов: рендеринг, повторные попытки и извлечение данных могут расходовать больше единиц тарификации.
Создаем интерфейс и базу данных
Шаг 1: Сгенерируйте минимально полезное приложение
Создайте проект в Lovable и задайте ему четкие рамки. Не просите "enterprise-дашборд для скрейпинга". Обычно в ответ вы получите декоративные графики задолго до того, как заработает первый реальный запрос.
Вставьте этот промпт:
```text Build an authenticated single-page web scraper app called Page Ledger.
Use Supabase for authentication, database storage, and a server-side Edge Function. Do not call the scraping provider from the browser.
Screens:
- Sign in.
- Dashboard with one HTTPS URL input and a Scrape page button.
- Results table with URL, title, status, and creation date.
- Result detail with extracted Markdown and a source link.
Create a scrape_jobs table with: id, user_id, requested_url, final_url, status, title, markdown, error_code, created_at, completed_at.
Requirements:
- Users can read only their own jobs using row-level security.
- The server assigns ownership from the verified user session.
- Provider credentials stay in backend secrets.
- Only exact hostnames in a server-managed allowlist are accepted.
- Start with one active job per user and 10 submissions per day.
- Enforce quotas atomically on the server.
- Show queued, running, succeeded, failed, and timed_out states.
- Never claim success using mock data.
- Add CSV export for the signed-in user's results.
- Render extracted content safely, with raw HTML disabled.
First implement the schema, access policies, and UI. Before adding the provider call, explain the authentication flow, secret storage, and proposed quota enforcement for review. ```
Разделяйте разработку на небольшие этапы, которые легко проверить. В библиотеке промптов есть готовые шаблоны, помогающие удерживать фокус в последующих запросах.
Шаг 2: Подключите Supabase и проверьте разграничение доступа
Подключите нужный проект Supabase через штатную интеграцию в Lovable. Обязательно сверьте идентификатор проекта перед накатыванием миграций. Случайно привязать продакшен-базу - слишком дорогая ошибка.
Относитесь к сгенерированным политик ам безопасности как к коду, требующему обязательного тестирования.
Поле `scrape_jobs.user_id` должно ссылаться на авторизованного пользователя. Включите Row-Level Security и разрешайте чтение только в том случае, если владелец строки совпадает с текущим пользователем.
По этой архитектуре браузер не создает и не обновляет задачи напрямую. Бэкенд валидирует токен пользователя, сам назначает владельца и фиксирует статус задачи. Никогда не доверяйте `user_id`, переданному в теле запроса.
Если бэкенд использует сервисный ключ базы данных с повышенными правами, помните: он обходит Row-Level Security. Любое чтение или обновление через такой клиент обязано явно проверять права владельца. Никогда не помещайте этот ключ в переменные окружения фронтенда или клиентский бандл.
Шаг 3: Сделайте статусы информативными
Создавайте задачу в базе до отправки запроса в Firecrawl. Так ошибки останутся зафиксированными, а не пропадут бесследно за всплывающим уведомлением.
Сохраняйте понятные коды ошибок, например `DOMAIN_NOT_ALLOWED`, `RATE_LIMITED`, `FETCH_FAILED` и `PROVIDER_TIMEOUT`. Подробные диагностические логи от провайдера держите в закрытых логах сервера, а не в ответе клиенту.
Используйте статус `timed_out`, если запрос превысил лимит ожидания. Не оставляйте задачи вечно висеть в процессе выполнения.
Безопасное подключение скрейпера
Шаг 4: Добавьте ключ провайдера
Сгенерируйте API-ключ Firecrawl и сохраните его в секретах бэкенда, например под именем `FIRECRAWL_API_KEY`. Считывайте его исключительно внутри серверной функции.
Не вставляйте рабочий ключ в чат Lovable. Не записывайте его в переменные, доступные браузеру, вроде `VITE_FIRECRAWL_API_KEY`. Если ключ попал в собранный JavaScript-бандл, считайте, что его уже скопировали.
API скрейпинга Firecrawl v2 принимает запросы в таком формате. Перед развертыванием сверьтесь со свежей документацией сервиса:
```http POST https://api.firecrawl.dev/v2/scrape Authorization: Bearer YOUR_SERVER_SIDE_KEY Content-Type: application/json
{ "url": "https://your-approved-domain.example/docs/start", "formats": ["markdown"], "onlyMainContent": true } ```
Замените тестовый URL на разрешенную страницу. При успешном ответе сервис возвращает извлеченный Markdown в поле `data.markdown` и метаданные страницы в `data.metadata`. Обязательно предусмотрите обработку пустых метаданных, пустого контента, сбоев провайдера и ответов не в формате JSON.
Сохраняйте заголовок, если он есть. Записывайте подтвержденный финальный URL, если провайдер его передает. Если нет - лучше оставить поле пустым, чем делать вид, что отправленный пользователем URL и был конечной точкой.
Шаг 5: Валидируйте URL до того, как потратите кредиты
Бэкенд должен выполнять следующие проверки строго по порядку:
- Проверить токен авторизованного пользователя.
- Разобрать URL штатным парсером, а не просто регулярным выражением.
- Требовать протокол HTTPS и отклонять адреса со встроенными логинами или паролями.
