ScrapeGraphAI · сбор данных без парсера · сентябрь 2026

Скрапинг сайта без кода: собрать список словами за 4 шага

Страница библиотеки ScrapeGraphAI на гитхабе: 30.9k звёзд, лицензия MIT, описание Python scraper based on AI
Страница библиотеки на гитхабе: справа видно 30.9k звёзд, 3.1k форков и лицензию MIT. Кадр снят 13 сентября 2026 года, github.com/ScrapeGraphAI/Scrapegraph-ai

Собрать список с чужой страницы можно так: ставишь открытую библиотеку scrapegraphai, пишешь адрес и одну фразу обычными словами - «собери заголовки новостей с их адресами». Через 15-20 секунд на экране готовый список: заголовок и ссылка на каждой строке. Устройство страницы разбирает языковая модель. У меня сбор занял 13,2 секунды и не стоил ни копейки

Начни с проверки, а не с установки: набери в чёрном окне команд «python3 --version». Ответ 3.12 или выше - ставь пакет и работай по шагам ниже. Ответ 3.11 или меньше - сначала обнови Python, иначе установка откажет на первой же команде

Проверь за 20 секунд, пойдёт ли у тебя вообще

Окно команд: модель ollama/qwen2.5:7b, запрос по-русски и готовый список с заголовками и адресами за 13.2 секунды
Мой прогон 13 сентября 2026 года: сверху видны модель, адрес страницы и запрос русскими словами, снизу готовый список. Между запуском и результатом прошло 13,2 секунды

Прежде чем что-то ставить, открой чёрное окно команд (на маке оно называется «Терминал», на Windows - «Командная строка») и набери одну строку:

python3 --version

Дальше два исхода, и они решают всё:

  • число 3.12 или больше (у меня напечаталось Python 3.14.7) - можешь идти дальше, всё сойдётся
  • число 3.11 или меньше - библиотека просто не встанет. В её карточке на PyPI стоит требование «не ниже 3.12», и установщик откажет. Сначала обнови Python, потом возвращайся

Здесь застревают чаще всего: команда установки печатает непонятную ошибку про версию, и человек решает, что дело в нём. Если Python у тебя вообще не стоит, у меня есть разбор Python с нуля для первой недели

Шаг 1. Поставь библиотеку и браузерный движок

Выполни в том же окне две команды подряд:

pip install scrapegraphai
playwright install chromium

Первая минуту-две качает нужные части списком и заканчивается строкой Successfully installed ... scrapegraphai-2.2.4. Вторая скачает браузер (это около сотни мегабайт) и молча вернёт тебя к приглашению для следующей команды

Понять, что всё встало, можно по одной строке: в выводе есть Successfully installed со словом scrapegraphai и номером версии. Нет этой строки - установка не прошла, читай последнюю ошибку сверху вниз

Зачем вторая команда. Библиотеке нужен настоящий браузер, чтобы открыть страницу как человек. Многие сайты дорисовывают содержимое уже после загрузки, и без браузера скачается пустой каркас. Команда кладёт этот браузер в свою отдельную папку, твой обычный браузер она не трогает

🔴 Смотри на имя пакета внимательно. Ставится scrapegraphai - одним словом, без дефиса. Рядом лежит пакет scrapegraph-py, и это ДРУГАЯ вещь: платный облачный сервис тех же авторов, он просит ключ и списывает деньги за каждый запрос. Ошибка в один дефис уводит с бесплатного пути на платный, и человек узнаёт об этом по счёту

Шаг 2. Поставь модель, которая работает бесплатно

Вот барьер, о котором не говорят ни в одном ролике про эту библиотеку. Сама библиотека читать страницу не умеет. Она умеет объяснить задачу языковой модели и разобрать её ответ. Модель надо привести свою, и путей ровно два:

ПутьЧто нужноСколько стоит
Ключ облачной модели (OpenAI, Groq, Gemini)зарегистрироваться, привязать карту, скопировать ключплатишь за каждый запрос по счётчику
Своя модель через Ollamaскачать программу и одну модельноль, всё крутится на твоём ноутбуке

Таблица прокручивается вбок →

Авторы говорят об этом прямо, просто в таблице, которую мало кто дочитывает:

Таблица из описания библиотеки: слева открытая версия scrapegraphai, справа платный облачный сервис scrapegraph-py
Раздел «Open Source vs Managed API» в описании самого проекта. В строке LLM у открытой версии написано «Bring your own», а в заголовке правой колонки стоит имя платного близнеца. Кадр снят 13 сентября 2026 года, github.com/ScrapeGraphAI/Scrapegraph-ai

Мы идём вторым. Скачай Ollama с ollama.com как обычную программу, установи, потом одна команда:

ollama pull qwen2.5:7b

Пойдёт полоска загрузки примерно на 4-5 гигабайт, в конце появится слово success. Готово это или нет, покажет команда ollama list: она печатает табличку, и в ней должна стоять строка qwen2.5:7b

Почему именно эта модель, а не та, что в примере авторов. Я прогнал одну и ту же задачу тремя разными моделями, на одной странице, одним запросом. Результаты разошлись сильно:

МодельВремяЧто вышло
llama3.2 (стоит в официальном примере)23,6 секбрак: вернула {"content": "["} и оборвалась на первой скобке
qwen3:4b (модель, которая думает вслух)848 секбрак: Response timeout exceeded, не уложилась во внутренний лимит
qwen2.5:7b20,6 сек10 записей, у каждой заголовок и адрес

Таблица прокручивается вбок →

Маленькая модель из примера не тянет разбор страницы: начинает список и теряет нить. Модель, которая думает вслух, размышляет так долго, что библиотека перестаёт её ждать на 480-й секунде. Работает обычная модель среднего размера, и это единственный практический вывод, который сэкономит тебе вечер

Вот как выглядел брак у маленькой модели, дословно с моего экрана:

МОДЕЛЬ: ollama/llama3.2   (локально, без ключей и без оплаты)
АДРЕС:  https://news.ycombinator.com/
РЕЗУЛЬТАТ за 23.6 сек:
{
  "content": "["
}

Одна открывающая скобка вместо десяти записей. Библиотека отработала честно и уложилась в 23,6 секунды, не справилась именно модель

Если Ollama у тебя ещё не стоит, вот отдельный разбор: как установить Ollama и выбрать модель под свою память. Про то, чем вообще хороши открытые инструменты вместо платных подписок, у меня тоже есть сводка

Шаг 3. Напиши, что тебе нужно, обычными словами

Создай рядом файл sobrat.py и положи в него двенадцать строк:

from scrapegraphai.graphs import SmartScraperGraph
import json

graph = SmartScraperGraph(
    prompt="Собери заголовки новостей с их адресами. Верни ответ списком: поле news, внутри поля title и url.",
    source="https://news.ycombinator.com/",
    config={"llm": {"model": "ollama/qwen2.5:7b",
                    "model_tokens": 8192,
                    "format": "json"},
            "headless": True},
)

print(json.dumps(graph.run(), indent=2, ensure_ascii=False))

Правишь здесь ровно две строки, остальное настройка и её оставь как есть:

  • prompt - что тебе нужно, своими словами. По-русски можно, я так и писал
  • source - адрес страницы, с которой собираем

После сохранения на экране ничего не произойдёт, это просто заготовка. Убедиться, что файл лежит там, где надо, поможет команда ls: она напечатает список файлов папки, и sobrat.py должен быть среди них

Как формулировать запрос, чтобы получилось с первого раза. Три вещи, которые реально влияют:

  • назови поля - не «собери новости», а «собери заголовок и адрес каждой новости». Отдаётся ровно то, что названо
  • скажи, как назвать список - «верни ответ списком, поле news». Тогда ответ приходит одинаковым от раза к разу, и его удобно разбирать дальше
  • ограничь количество - «первые 10». Без ограничения модель может пойти по всей странице и упереться в лимит времени

Формулировка тут решает больше, чем кажется. У меня есть отдельный разбор приёмов переформулировки запросов, они работают и здесь

Шаг 4. Запусти и прочитай свой список

Одна команда:

python3 sobrat.py

Сначала появится строка --- (Fetching HTML from: ...) - это библиотека открыла страницу браузером. Потом 15-20 секунд тишины, пока модель разбирает текст. Потом на экран печатается сам список

Опознать успех просто: в выводе есть фигурные скобки, а внутри строки вида "title": "..." и "url": "...". Каждая запись на своём месте, полей столько, сколько ты назвал в запросе

Вот как это выглядело у меня на десяти записях:

Хвост готового списка: заголовки новостей и их адреса построчно
Второй мой прогон на модели ollama/qwen2.5:7b, хвост списка из 10 записей за 20,6 секунды. Каждая запись несёт заголовок и адрес, ничего лишнего рядом не лежит

В итоге у тебя на экране готовый список, который дальше можно вставить в таблицу, отдать нейросети на разбор или сохранить файлом. Ты не открывал устройство страницы, не искал в ней разметку и не писал ни строчки разбора. Что делать с этим списком дальше, разобрано в гайде ИИ анализ данных: своя таблица до чисел и графика

А если у тебя другой случай

Четыре ветки, каждая названа твоим условием, а не номером способа

Тебе нужен не один адрес, а десяток. Скажем, собрать предложения у десяти конкурентов. Меняешь одну строку вверху файла: вместо SmartScraperGraph берёшь SmartScraperMultiGraph, а в source кладёшь не адрес, а список адресов. Запрос остаётся тот же, он применится к каждому

Ты не знаешь адресов, знаешь только тему. Берёшь SearchGraph. Он сам идёт в поисковик, забирает первые результаты и собирает с них. Адрес указывать не надо вовсе, только запрос словами

Гонять модель каждый раз долго и жалко. Берёшь ScriptCreatorGraph. Он отдаёт не данные, а готовую программку, которая собирает то же самое уже без модели. Один раз заплатил временем, дальше работает быстро

Страница огромная, и всё висит. Это не поломка, это устройство: длинная страница режется на куски, и каждый кусок отправляется модели отдельно. Я поймал это на своей же странице блога - в ней оказалось 223 929 знаков текста, библиотека нарезала 11 кусков и не уложилась в лимит ожидания. Выход простой: бери страницу поменьше или ту, где нужные данные лежат ближе к началу

Что ломается и что с этим делать

Реальные ошибки с их экранным текстом. Все четыре я поймал сам, а не придумал

{"content": "["} вместо списка. Модель начала ответ и оборвалась. Причина почти всегда одна: модель слишком маленькая. Поставь qwen2.5:7b вместо трёхмиллиардной

Response timeout exceeded. Модель не успела за 480 секунд. Две причины: либо взял модель, которая думает вслух (она тратит время на размышления), либо страница слишком длинная. Смени модель на обычную, страницу возьми покороче

None of the requested terms [...] appear in the parsed content. Библиотека честно предупреждает: слов из твоего запроса на странице она не нашла. Либо страница дорисовывает содержимое и без браузера пришёл пустой каркас (проверь, что команда с playwright прошла), либо ты просишь то, чего на странице нет

Установка отказывается на первой команде. Смотри на версию Python, требование пакета - не ниже 3.12

Второй путь: MCP-сервер Scrapling, когда сайт закрыт Cloudflare

Связка из шагов 1-4 держится на библиотеке scrapegraphai, и для обычной открытой страницы этого хватает. Для сайта, который встречает капчей или проверкой Cloudflare Turnstile, есть отдельный инструмент - открытая библиотека Scrapling, у неё есть готовый MCP-сервер: скрапер встраивается прямо в Claude Code или Codex и работает по одной фразе в чате, без отдельного файла с кодом

Установка

Две команды подряд в чёрном окне:

pip install "scrapling[ai]"
scrapling install

Первая ставит саму библиотеку вместе с MCP-сервером, вторая докачивает браузеры под неё. Готовность проверяется командой which scrapling-mcp - если в ответ пришёл путь вроде /Users/имя/.venv/bin/scrapling-mcp, сервер встал

Три способа достать страницу, одной таблицей

Внутри библиотеки за это отвечают три разных класса, и выбор между ними решает саму задачу:

КлассИнструмент MCPДля чего
Обычный запросmake_requestбыстрый HTTP-запрос без браузера, для простых страниц без защиты
Браузерfetchполноценный браузер (Chromium/Chrome), для страниц с JavaScript
Обход защитыstealthy_fetchтот же браузер, но с подделкой отпечатка, проходит мимо Cloudflare Turnstile и похожих проверок

Таблица прокручивается вбок →

У каждого из трёх есть пакетная версия для нескольких адресов разом: bulk_get, bulk_fetch, bulk_stealthy_fetch

Если сайт закрыт Cloudflare

Скажи об этом прямо в запросе, не жди, пока модель сама наткнётся на капчу: «собери цену с этой страницы, учти, что там стоит защита Cloudflare Turnstile». Тогда модель сразу берёт stealthy_fetch вместо обычного запроса, и связка проходит защиту за один заход вместо нескольких неудачных попыток

Подключить к Claude Code

Одна команда:

claude mcp add ScraplingServer "$(which scrapling-mcp)"

Подключить к Codex

Тоже одна команда:

codex mcp add ScraplingServer -- scrapling-mcp

После любой из команд помощник перезапускается, и сервер ScraplingServer появляется в списке подключённых инструментов

Про скорость авторы пишут прямо в описании проекта: на тесте разбора текста страницы инструмент обгоняет BeautifulSoup с Lxml в сотни раз - в разных редакциях README цифра стоит от ~700 до ~785 раз, в зависимости от версии библиотеки. Это заявление авторов бенчмарка на разборе уже скачанной страницы, не мой собственный замер и не скорость обхода защиты

Что забрать с собой

Твой рабочий предмет это файл sobrat.py из шага 3. Он универсальный: под любую новую задачу в нём правятся ровно две строки

А это таблица решений, по которой через неделю выберешь нужный вариант, не перечитывая статью:

Что собираешьЧто братьЧто меняешь в файле
одну страницу, один разSmartScraperGraphадрес и запрос
десять страниц одним запросомSmartScraperMultiGraphсписок адресов вместо адреса
не знаешь адресов, знаешь темуSearchGraphтолько запрос, адрес убираешь
собирать регулярно и быстроScriptCreatorGraphполучишь программку, дальше работаешь ей

Таблица прокручивается вбок →

И четыре готовых запроса под частые задачи, вставляются в строку prompt как есть:

  • конкуренты: «Собери все посты со страницы. Для каждого верни заголовок, первые два предложения текста и дату. Верни ответ списком, поле posts»
  • вакансии: «Собери вакансии со страницы. Для каждой верни название компании, должность и вилку зарплаты. Верни ответ списком, поле jobs»
  • товары: «Собери карточки товаров. Для каждого верни название, цену и наличие. Верни ответ списком, поле items»
  • цены конкурента: «Собери тарифы со страницы. Для каждого верни название тарифа, цену и список того, что входит. Верни ответ списком, поле plans»

Две вещи, о которых честно стоит знать

Библиотека отправляет анонимную статистику использования. Отключается одной строкой перед запуском:

export SCRAPEGRAPHAI_TELEMETRY_ENABLED=false

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

Что почитать дальше на этом же сайте

Все числа в статье я снял сам 12 и 13 сентября 2026 года: звёзды и лицензию с живой страницы репозитория, версию пакета с его карточки, а три времени прогона с собственного экрана. Ссылки лежат в источниках внизу

Источники

Памятка: сбор данных без кода коротко

Шесть строк, которые закрывают весь разбор

Сохрани себе

  • Python должен быть не ниже 3.12, проверяется командой python3 --version
  • Ставится пакет scrapegraphai одним словом; scrapegraph-py это платный близнец, не он
  • Браузерный движок ставится отдельной командой playwright install chromium
  • Модель нужна своя: бесплатно через Ollama, платно через ключ облака
  • Модель из официального примера мала для задачи, рабочая связка qwen2.5:7b
  • В файле правятся две строки: адрес страницы и запрос обычными словами

Куда это ведёт

Ты собрал данные словами, а не кодом

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

На Концентрате я веду через это за руку, от установки до работающей системы, на живых проектах

Занять место бесплатно

Регистрация на сайте до 14 октября, участие бесплатное

Частые вопросы

Сколько это стоит?

По маршруту из статьи ноль. Библиотека под лицензией MIT, Ollama бесплатная, модель скачивается один раз. Платить придётся только если пойдёшь по ветке с облачным ключом

Нужно ли уметь программировать?

Нет. Из кода здесь двенадцать строк, которые копируются целиком, и в них ты правишь две

Заработает на Windows?

Да, шаги те же. Разница только в том, как открывается окно команд и как ставится Python

Почему у меня список получился короче, чем я просил?

Обычно потому, что нужные строки оказались за границей куска, на который модель нарезала страницу. Попроси меньше записей или возьми страницу покороче

Насколько свежие цифры в статье?

Версия пакета 2.2.4 от 7 сентября 2026, звёзды и форки сняты 12 сентября 2026, все три прогона моделей - 13 сентября 2026