ScrapeGraphAI — библиотека для Python, которая собирает конвейер извлечения из графа шагов: загрузить страницу, разбить на части, спросить языковую модель и склеить ответ в словарь с нужными полями. Библиотека работает у вас, а модель выбирается в настройках: локальная через Ollama или облачная по ключу. Метод годится для публичных страниц, на сбор которых у компании есть право, и для небольших выборок, где результат проверяет человек.
Библиотека с графом
Установка состоит из pip install scrapegraphai и playwright install; основной конвейер SmartScraperGraph принимает запрос на естественном языке, адрес страницы и настройки модели, а возвращает словарь.
Репозиторий ScrapeGraphAI опубликован под лицензией MIT. На 5 октября 2026 репозиторий открыт для работы, последний выпуск датирован 25 сентября 2026, последний коммит в основной ветке тоже в сентябре. В README указано, что библиотека предназначена только для исследования данных и исследовательских задач; читайте эту оговорку как границу применения и для промышленного потока сначала оцените риски. Название носит и облачный сервис ScrapeGraphAI с собственным API: это другой продукт, его условия и тарифы смотрите на сайте вендора.
Механика отличается от облачного сервиса обхода вроде Firecrawl. Тот сначала возвращает очищенное содержимое страниц, а структурное извлечение предлагает как дополнение. Здесь запрос к модели встроен в конвейер: страницу читает модель и сама решает, какой фрагмент подходит под запрос. Выигрыш в том, что один и тот же запрос способен работать на страницах с разной вёрсткой. Цена вопроса состоит в том, что результат зависит от модели, и каждое значение требует проверки.
Модель задаётся в конфигурации: README показывает пример с локальной Ollama и вариант с облачной моделью по ключу. Локальный вариант оставляет текст страниц на вашем оборудовании; с облачной моделью текст уходит вендору модели, и это учитывают, если страницы содержат что-либо кроме публичных сведений. О локальном запуске моделей рассказывает термин Ollama.
Схема полей
Запрос к графу формулируйте как перечень полей; просьба «расскажи о странице» даёт неуправляемый результат. Для карточки услуги это название, срок, условия и ссылка на источник. Чем уже перечень, тем меньше места для домысла. Поля без значения должны возвращаться пустыми: в запросе прямо сказано, что вместо догадки нужен пустой ответ.
| Поле | Правило заполнения | Проверка скриптом |
|---|---|---|
| Название | Дословно из заголовка страницы | Строка присутствует в тексте страницы |
| Срок | Только если указан числом в тексте | Число найдено рядом с названием |
| Условия | Короткая цитата, без пересказа | Цитата целиком встречается в тексте |
| Источник | Адрес из списка, без придуманных | Совпадает с входным адресом |
Главная проверка проста для скрипта: каждое извлечённое значение должно находиться в исходном тексте страницы. Совпадения нет — запись помечается и уходит на ручную сверку. Такая проверка ловит самую неприятную ошибку подобных конвейеров, когда модель аккуратно оформляет значение, полностью отсутствующее на странице. Результат хранится вместе с адресом, временем и версией схемы, чтобы позже воспроизвести любой разбор.
Источники и права
Библиотека умеет открывать любую доступную страницу, поэтому границы задаёт список адресов вне кода. Составьте таблицу: адрес, владелец, основание для сбора, частота обновления. Собственный сайт, партнёрские материалы с разрешением и открытые данные с ясной лицензией проходят. Закрытые разделы, страницы с персональными данными и сайты, чьи правила запрещают автоматический сбор, остаются вне списка. Правила сайта, robots.txt, авторские права и закон о персональных данных относятся к ответственности компании, спорные случаи разбирает юрист.
Права на данные зависят от их вида. Цены, наличие и адреса из открытого каталога оценивают иначе, чем авторские тексты статей, а сведения о людях требуют отдельного основания. Поэтому в таблице источников для каждой строки заведите графу «что именно собираем» и сверьте её с юристом до первого запуска. Результат извлечения хранится у компании, и любое использование за пределами внутреннего анализа согласуется заново.
Нагрузку на чужой сайт держите малой: пауза между запросами, один поток, обход в часы низкой нагрузки на сайт. Если сайт отвечает ограничением, обход прекращается, а попытки обойти защиту исключены. Для переписки с владельцем площадки и согласования доступа пригодится обычная почта, и ответ владельца полезнее любой технической хитрости.
Библиотека отправляет анонимную телеметрию использования; README описывает переменную окружения SCRAPEGRAPHAI_TELEMETRY_ENABLED со значением false, которая её отключает. Для корпоративной среды это значение включают в конфигурацию сразу, наряду с запретом исходящих соединений, кроме нужных.
Какие публичные страницы вам нужно разбирать на поля регулярно?
Контроль качества
Оценивать конвейер лучше на размеченной выборке. Возьмите тридцать страниц разной вёрстки, заполните поля вручную и получите эталон. Затем прогоните библиотеку и посчитайте для каждого поля долю совпадений и долю пустых значений. Отдельная графа — выдуманные значения, которых нет в тексте страницы. Модель, схему и версию библиотеки при замене меняйте по одной и сравнивайте с тем же эталоном.
- Выберите тридцать страниц из списка и вручную заполните поля эталонной таблицы.
- Установите библиотеку в отдельное окружение, зафиксируйте версию и отключите телеметрию.
- Прогоните SmartScraperGraph по каждой странице с одинаковым запросом и сохраните словари.
- Сравните с эталоном по каждому полю и отдельно посчитайте значения, которых нет на странице.
- Разберите десять худших случаев: причина в вёрстке, в запросе или в модели.
Отдельно измерьте стабильность. Один и тот же запрос на одной странице модель способна обработать по-разному, особенно при ненулевой температуре. Прогоните страницу десять раз и посмотрите, сколько различных словарей получилось. Разброс в названии означает слабый запрос, разброс в условиях означает, что поле лучше отдать человеку. Фиксируйте температуру и модель в конфигурации, чтобы разбор можно было воспроизвести.
Порог допуска задаёт владелец процесса. Для справочных полей вроде названий допустим один порог, для условий и сроков порог выше, а запись с расхождением идёт к сотруднику. Если выдуманные значения встречаются регулярно, меняют модель либо дробят запрос на части; усиление формулировки строгими словами помогает слабо. Когда извлечённые поля потом нужно спрашивать из таблиц, пригодится материал про вопросы к таблицам и базам на обычном языке.
Запуск у себя
Рабочий запуск оформляют как плановое задание на сервере или в среде автоматизации: список адресов читается из таблицы, результаты пишутся в базу, ошибки уходят в журнал. Задание ограничивает число страниц за один запуск и останавливается при серии ошибок. Журнал хранит адрес, время, версию схемы, модель и итог проверки, а текст страниц с персональными данными остаётся вне журнала.
Расход на модель считайте по числу страниц и размеру текста: длинная страница делится на части, и каждая часть превращается в отдельный вызов. С облачной моделью учитывайте тариф вендора за токены, актуальные цифры лежат на его странице цен. Локальная модель снимает платёж за токены, но требует оборудования и времени на настройку, так что выбор делают по объёму и чувствительности страниц.
Отчёт для команды собирается из проверенных записей. Записи с отметкой «нет в тексте» ждут ручной сверки и попадают в отчёт только после неё. Обновление библиотеки принимайте после повторного прогона эталонной выборки: смена версии меняет поведение графа, и без сравнения изменение остаётся незаметным. Как мы встраиваем такие конвейеры в процессы компании, описано на странице про автоматизацию бизнес-процессов, а про сбор данных через управляемый браузер рассказывает разбор Playwright MCP.
Сократите задачу до одной страницы и трёх полей, прогоните её десять раз подряд и сравните результаты между собой. Расхождение между прогонами скажет о стабильности конвейера больше любого описания. Если нужен такой конвейер с эталоном и проверкой под ваши источники, обсудим его на Discovery: состав работ определим после разбора задачи.