Свой сборщик контактов на ScrapeGraphAI: три урока от установки до автозапуска

Три урока, за которые собирается свой сборщик контактов на открытой библиотеке ScrapeGraphAI. Первый урок ставит систему и достаёт данные с одной страницы, второй проходит по каталогу компаний и складывает всё в таблицу, третий ставит сбор на автозапуск и подключает его к агенту. Внутри готовые куски кода под копирование и раздел про то, что собирать можно, а что нельзя.

Читается за 8 минут. Первый урок проходится примерно за полчаса, вся система собирается за вечер. Библиотека бесплатная, лицензия MIT, на конец августа 2026 около 30 тысяч звёзд на GitHub.

Иди строго по урокам. В первом уроке важно дойти до рабочего результата на ОДНОЙ странице и увидеть данные, иначе на каталоге ошибка умножится на сотни страниц. Модель на старте бери локальную, тогда сбор ничего не стоит. Раздел про границы прочитай до того, как запустишь сбор в первый раз.

Что это и почему оно бесплатное

ScrapeGraphAI это библиотека на Python, которая соединяет обычный сбор данных со страниц и языковую модель. Ты пишешь словами, что нужно достать, и даёшь адрес страницы. Разбором вёрстки занимается модель, поэтому под каждый сайт свой разборщик писать не приходится.

  1. Библиотека открытая и бесплатная, лицензия MIT.
  2. Работает на твоём компьютере, данные никуда не уходят.
  3. Модель подключается любая. Локальная через Ollama обходится в ноль, облачная берёт оплату за объём текста.
  4. Ссылка на проект: github.com/ScrapeGraphAI/Scrapegraph-ai
Локальная модель это ключ ко всей экономике. Каталог на тысячу карточек через облачную модель стоит заметных денег, через локальную только времени.

Урок 1. Установка и первый сбор с одной страницы

Ставим три вещи: саму библиотеку, браузерный движок для загрузки страниц и локальную модель.

Шаг 1. Библиотека и браузер

Промпт
pip install scrapegraphai playwright install

Шаг 2. Локальная модель

Поставь Ollama с сайта ollama.com, затем скачай модель командой ниже. Она весит около двух гигабайт.

Промпт
ollama pull llama3.2

Шаг 3. Первый сбор

Создай файл sbor.py, вставь код целиком и запусти его командой python sbor.py. Меняй только адрес и запрос.

Промпт
from scrapegraphai.graphs import SmartScraperGraph import json graph_config = { "llm": { "model": "ollama/llama3.2", "model_tokens": 8192, "format": "json", }, "verbose": True, } graph = SmartScraperGraph( prompt="Достань название компании, сферу деятельности, телефон, почту и ссылки на соцсети", source="https://адрес-страницы", config=graph_config, ) result = graph.run() print(json.dumps(result, indent=4, ensure_ascii=False))
Пока результат на одной странице неверный, дальше не иди. Правится он запросом: называй поля так, как они подписаны на самом сайте, и проси ровно то, что там есть.

Урок 2. Каталог компаний и таблица

Одна страница это проверка. Смысл появляется, когда система проходит каталог и складывает результат в таблицу.

  1. Найди каталог своей ниши, где компании лежат списком: отраслевой справочник, участники выставки, площадка объявлений.
  2. Собери адреса карточек. Первым заходом достань со страницы списка все ссылки на карточки, тем же способом из первого урока.
  3. Пройди по карточкам циклом и на каждой запусти сбор нужных полей.
  4. Складывай результат в таблицу построчно, сразу после каждой карточки. Тогда обрыв на середине не съест уже собранное.

Код, который дописывает строки в таблицу

Промпт
import csv, json from scrapegraphai.graphs import SmartScraperGraph ssylki = ["https://карточка-1", "https://карточка-2"] with open("kontakty.csv", "a", newline="", encoding="utf-8") as f: w = csv.writer(f) for u in ssylki: g = SmartScraperGraph( prompt="Достань название компании, имя владельца, телефон, почту, город", source=u, config=graph_config, ) r = g.run() w.writerow([u, json.dumps(r, ensure_ascii=False)]) print("готово:", u)
Ставь между карточками паузу в пару секунд. Быстрый обход сайта выглядит как нагрузка и приводит к блокировке твоего адреса.

Урок 3. Автозапуск и связка с агентом

Система становится рабочей, когда запускается сама и приносит свежие строки каждое утро.

  1. Оформи сбор одним файлом, который принимает адрес каталога и пишет в таблицу с датой в имени.
  2. Поставь его на ежедневный запуск планировщиком: на Windows это Планировщик заданий, на сервере обычная запись в расписании.
  3. Добавь проверку на повторы по телефону и почте, тогда таблица не будет пухнуть от одних и тех же компаний.
  4. Подключи агента. У проекта есть готовый разъём MCP, его адрес лежит в описании проекта на GitHub, в разделе про интеграции. После подключения агент запускает сбор словами и сразу приводит таблицу в порядок.
Проверь один прогон руками до автозапуска. Система, которая молча собирает мусор каждое утро, хуже отсутствующей.

Что собирать можно и что нельзя

Тема выглядит безобидной, поэтому границу называю прямо.

  • Открытые контакты компаний, которые организация сама опубликовала для связи, собирать можно.
  • Личные данные людей это отдельная история. Домашние адреса, личные телефоны, данные из закрытых разделов трогать нельзя.
  • Смотри условия самого сайта. Прямой запрет на автоматический сбор в правилах площадки означает, что сбор нарушает договор с ней.
  • Собранный контакт не даёт права на рассылку. Массовая рассылка без согласия человека это спам, и отвечает за неё отправитель.
  • Рабочий порядок такой: собрал контакт, написал одно человеческое письмо по делу, получил отказ, удалил из базы.

Чек-лист

  1. Библиотека, браузерный движок и локальная модель установлены.
  2. Сбор с одной страницы даёт верные поля.
  3. Ссылки на карточки каталога собраны отдельным заходом.
  4. Таблица пишется построчно, между карточками стоит пауза.
  5. Повторы отсеиваются по телефону и почте.
  6. Автозапуск поставлен после ручной проверки одного прогона.
  7. Источник проверен на запрет автоматического сбора.

Читать дальше в блоге

Эту тему я разбираю подробно в статье как набрать подписчиков в Instagram с нуля. Там же лежат остальные разборы про рост в Instagram.

Следующий шаг
Хочешь так же, но под свой блог и продукт?

Я собрал систему, по которой обычный человек запускает блог с нуля и набирает аудиторию без съёмок, монтажа и команды. Внутри разбор, с которого стартовал сам.

Открыть разбор: с чего начать