Сложность: Уровень сложностиУровень сложностиУровень сложности

Михаил Волков: собрал бота-парсера для беговых событий за неделю без опыта в программировании

В кейсе рассказываем, как Михаил Волков, продакт-менеджер без опыта в программировании собрал бота, который парсит беговые события с разных сайтов и публикует подборки в Telegram-каналы.

Опыт с нейросетями: я начал пользоваться нейронками около двух лет назад, еще когда была третья версия GPT. Тогда модель была слабой, и было непонятно, под какие задачи она вообще подходит. Поэтому я использовал ее в основном для бытовых вещей. Со временем модели стали сильнее, и сейчас я пользуюсь нейросетями практически для всего: работы с Excel, быстрых исследований, анализа отзывов.

В Нейроцех я пришел за насмотренностью — хотел научиться быстро делать прототипы и ходить с ними к пользователям. Этот проект стал моей тренировкой после вебинара по вайбкодингу.

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

За всеми календарями не уследишь

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

Проблема заключалась в том, что информация о стартах была разбросана по множеству источников. Существовало несколько сайтов-агрегаторов, каналы организаторов в Telegram, отдельные календари по дисциплинам. Чтобы ничего не пропустить, нужно было подписаться на все это и регулярно мониторить. Делать это было сложно, поэтому я часто узнавал об интересных событиях, когда регистрация уже закрылась.

Так появилась идея сделать бота, который раз в неделю сам присылал бы мне сообщение: «Вот у тебя выходные свободны, вот список стартов, иди регистрируйся».

Как устроен бот: три скрипта и никакой базы данных

Архитектуру я сделал максимально простой. Никаких баз данных — вся информация хранится в обычных CSV-файлах. Система состоит из трех скриптов, каждый из которых отвечает за свою часть работы.

Первый скрипт — парсеры. Для каждого сайта-агрегатора я написал отдельный парсер. Он заходит на сайт, собирает информацию о событиях и складывает ее в CSV-файл. Я взял несколько топовых сайтов с календарями соревнований, скормил нейросети html-код страницы и попросил спарсить события в файлик. Теперь скрипты регулярно обходят их, вытаскивая свежие данные.

Как сделать парсер с помощью нейросети

Второй скрипт — объединение и фильтрация. Он проходит по всем CSV-файлам от парсеров, удаляет дубли и объединяет информацию из разных источников в один общий файл. На этом же этапе происходит фильтрация и в итоговом списке остаются только события с открытой регистрацией. 

Структура CSV
Сбор данных в CSV таблицу

Третий скрипт — формирование и публикация постов. Он выбирает события на текущую и следующую неделю, компонует их в пост и отправляет в Telegram-каналы. У меня три канала по тематикам: трейлы, беговые забеги, ориентирование и лыжные гонки. Все три канала администрирует один бот. Дополнительно я добавил публикацию в ВК — там у меня была полумертвая группа по лыжам, и я решил оживить ее хоть какой-то регулярной активностью.

Список мои каналов, куда поступает информация
Список мои каналов, куда поступает информация

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

Так выглядят посты в боте
Так выглядят посты в боте

Чтобы посты не выглядели сухим списком, я добавил приветственные сообщения и призывы к действию. Попросил нейросеть сгенерировать по 20–30 вариантов каждого типа: «сделай репост», «подпишись», «поделись с друзьями», «ставь лайк». Скрипт случайным образом подставляет их в посты, и они выглядят живее.

Бот публикует посты каждый вторник и работает на удаленном сервере круглосуточно.

Как формулировал задачу для нейросети

К идее парсинга я пришел через рабочую задачу. Мне нужно было анализировать конкурентов и собирать отзывы с разных площадок. Тогда я разобрался, как в принципе написать парсер и каким промптом объяснить задачу нейросети. Позже я посмотрел вебинар Нейроцеха с Шимой про работу с проектами через Warp и решил потренироваться на собственной задаче — боте для беговых событий.

Работу я начал с того, что написал в ChatGPT, какой результат хочу получить в конце. Попросил сформулировать техзадание и разбить его на шаги так, чтобы каждый шаг был атомарным — то есть его можно было реализовать и протестировать отдельно. Такой подход помогает нейросети меньше ошибаться, как и любому программисту.

Первый результат оказался мимо цели. ChatGPT выдал маркетинговую стратегию с описанием аудитории, охвата, источников данных, правового комплаенса. Хотя мне нужна была именно разработческая часть — как технически реализовать бота.

Тогда я попросил написать именно задание на разработку и применил прием, который подсмотрел в чатах у Замесина: добавил в промпт оценку неопределенности.

Prompt

Оцени неопределенность запроса. Если она больше 0.1, задай мне уточняющие вопросы.

Так выглядел промпт целиком
Так выглядел промпт целиком

После этого нейросеть начала задавать вопросы: в какой я стране, сколько готов тратить на маркетинг, какие сайты хочу мониторить. Этот диалог помог уточнить задачу, и следующий план оказался гораздо точнее.

Но даже уточненный план оказался избыточным. ChatGPT выдал огромную простыню с множеством пунктов. Половину из них я отсек, потому что некоторые вещи были откровенным перебором, и решение получалось слишком сложным для моих целей. Я упростил план, убрал лишнее, сохранил финальную версию и пошел писать код по пунктам.

Где писал код: от ChatGPT к Claude и Warp

Для написания кода я использовал несколько инструментов и переключался между ними по мере необходимости.

Сначала я писал код в веб-интерфейсе Claude. Скидывал ему все техзадание целиком и просил делать его шаг за шагом. Claude генерировал код, я копировал его к себе и запускал. Если что-то не работало, возвращался к Claude с описанием ошибки, и он продолжал разбираться. Так мы двигались по кругу, пока все не заработало. Использовал модель Claude 4.5 Sonnet.

Позже я подключил Warp — это терминал со встроенным ИИ-ассистентом. Про него я узнал из вебинара Шимы. Warp умеет сам выполнять команды в терминале, и это сильно помогло с рутинными задачами, о которых расскажу дальше.

Так выглядит работа через Warp
Так выглядит работа через Warp

Шима также советовал подключить GitHub для контроля версий, но я этого так и не сделал. Не видел необходимости разбираться — и без него все работало.

Главная боль: настройка окружения

Больше всего времени ушло не на сам код, а на все, что его окружало.

Типичная ситуация выглядела так: я запускал скрипт, а Python сообщал, что у меня нет нужных библиотек или неправильно настроено окружение. Приходилось останавливаться и идти все это устанавливать. Здесь как раз помогал Warp — когда Python говорил, что не хватает какой-то библиотеки, Warp мог сам ее установить без моего участия. Я перестал тратить время на рутинные операции с командной строкой.

Отдельной проблемой стали версии. Каждый новый кусок кода, который генерировала нейросеть, предлагал использовать другие версии библиотек. Начиналась переустановка, потом что-то переставало работать, и приходилось разбираться заново. Особенно доставал браузер Chrome, который использовался для парсинга — его приходилось переустанавливать снова и снова.

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

Такую документацию собрал Warp
Такую документацию собрал Warp

Еще одна организационная задача возникла, когда я понял, что моя локальная машина должна быть включена круглосуточно. Иначе скрипты не запустятся по расписанию. Держать компьютер постоянно включенным было неудобно, поэтому я купил сервер и перенес туда весь код. С тех пор процесс выглядел так: я собирал и тестировал все на локальной машине, а потом просто копировал файлы на сервер. Контроль версий между ними я пока не настроил — это решается с помощью Git, но руки до него так и не дошли.

В итоге сложнее всего оказалось не написать код, а справиться со всем вокруг него: настроить окружение, разобраться с версиями библиотек, купить и настроить сервер. Эти организационные задачи отняли больше всего сил.

Затраты: неделя вечеров и 20 долларов на WARP с Claude внутри 

На весь проект ушла примерно неделя. Я работал по вечерам и в дороге — все это было в нерабочее время.

По деньгам затраты оказались небольшими: на токены я потратил около 20 долларов на нейросети и WARP. Еще одной статьей расходов стала покупка сервера примерно за $15, чтобы бот мог работать круглосуточно.

Без нейросетей я бы такого бота точно не сделал. Не потому что задача была невероятно сложной, а потому что сам я не кодер. 

Результат: бот работает, пользователи довольны

Бот решил ту задачу, ради которой я его делал. Теперь, я каждый вторник получаю список стартов в Москве. Если у меня нет планов на выходные, я иду регистрироваться на понравившийся старт.

С редакторской точки зрения хочется сделать посты интереснее. Сейчас это просто списки с небольшими текстовками, а хотелось бы чего-то более цепляющего. Но пока нет нормального трафика, я не вижу смысла вкладываться в улучшения. Сначала нужно понять, есть ли аудитория за пределами моих знакомых, а уже потом думать о том, как ее удерживать.

Куда можно развить идею

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

Авиабилеты — парсить сайты операторов на конкретные направления и показывать, когда появляется выгодная цена. Аренда квартир — отслеживать новые объявления в нужном районе. Покупка машин — следить за свежими предложениями на площадках вроде Auto.ru.

По сути это аналог подписки на рассылку с лучшими предложениями, только собранный под себя. Ты сам выбираешь источники, сам настраиваешь фильтры, и бот приносит тебе только то, что реально интересно.

Как помог Нейроцех

В клуб я пришел за насмотренностью — хотел понять, как быстрее прототипировать и не тратить время своей команды разработки на тесты. Этот проект как раз стал практикой после вебинара с Шимой по вайбкодингу. Именно там я узнал про Warp и понял, как выстраивать работу с кодом через нейросети.

Еще мне было полезно следить за чатом клуба. Интересно было наблюдать, как другие люди решают похожие задачи. В чате выделились несколько экспертов, которые регулярно отвечали на вопросы — им отдельное спасибо.

Остальные материалы — по работе с картинками, видео — я пока глубоко не изучал, потому что не было необходимости. Но я знаю, что они есть, и когда понадобится, обязательно к ним вернусь.

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии