Скрипт автоматизации с ИИ: боты и парсеры

Как создать скрипт автоматизации с ИИ: Python для файлов, Excel и отчётов по почте, парсинг через requests или Playwright, cron, повторы, оповещения и закон.

Solviera Teknoloji 8 мин чтения

Чтобы создать скрипт автоматизации с ИИ, вы описываете повторяющуюся задачу кодинг-агенту и проверяете небольшой скрипт на Python, который он пишет. Переименование файлов, объединение файлов Excel и CSV, еженедельный отчёт по почте или парсер, отслеживающий цены на сайте, обычно укладываются в 50–200 строк. Сложно не написать промпт, а точно описать входные данные, проверить результат, поставить скрипт на расписание и вовремя узнать, что он сломался.

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

Что здесь значит «автоматизация с ИИ»

Я не имею в виду модель, которая сама выполняет работу каждый раз. Агент пишет скрипт один раз; дальше скрипт каждый день работает одинаково и без всякого ИИ. Разница важна: скрипт дёшев, воспроизводим, и вы можете прочитать, что он делает. Схема, где модель вызывается каждый день, стоит дороже, и её труднее предсказать.

Это vibe coding: вы не пишете код построчно, а описываете, что хотите, и направляете результат. Автоматизации для этого хорошо подходят, потому что цель ясна, а результат легко проверить: правильно ли названы файлы, те ли строки в таблице?

Какие задачи стоит автоматизировать?

Хороший кандидат часто повторяется, подчиняется правилам, которые можно записать, и его можно отменить, если что-то пошло не так. Типичные примеры:

  • Файлы: переименовать счета в папке Downloads по дате и разложить их по папкам год/месяц.
  • Excel и CSV: объединить файлы продаж, которые присылает каждый филиал, убрать пустые строки, собрать сводный лист.
  • Отчёты по почте: раз в неделю брать данные из папки или базы и отправлять сводку себе или команде.
  • Слежение за сайтами: отслеживать цену товара, новые записи на странице объявлений или анонсов и получать уведомление об изменениях.

Если решение должен принимать человек (оплата кому-то, отправка договора), остановите автоматизацию на шаге «подготовь, я утвержу».

Шаг 1: установите инструменты

Нужны кодинг-агент и Python. Подойдёт любой терминальный кодинг-агент: Claude Code, Codex, Gemini CLI или Aider умеют читать и писать файлы и запускать команды.

# Is Python 3 installed?
python3 --version

# project folder and virtual environment
mkdir invoice-sorter && cd invoice-sorter
git init
python3 -m venv .venv
source .venv/bin/activate      # Windows: .venv\Scripts\activate

Почему Python? Библиотеки для автоматизации зрелые: pandas и openpyxl для таблиц, requests для HTTP, beautifulsoup4 для разбора HTML, playwright для браузера. Агенты видели много кода с ними и ошибаются реже. Если папка проекта — git-репозиторий, любое изменение агента можно откатить.

Шаг 2: первый промпт

Расплывчатая просьба даёт расплывчатый скрипт. В хорошем первом сообщении есть вход, выход, правила и граничные случаи. Положите в папку два-три настоящих примера файлов (выдуманных, если в них персональные данные) и направьте агента к ним:

Write a Python script: rename_invoices.py

Input: PDF invoices in ./inbox. Examples are in ./samples.
Page one of each PDF has an "Invoice date: DD/MM/YYYY" line and a "Company:" line.

What it does:
- Rename the file to YYYY-MM-DD_company-name.pdf (lowercase, hyphens instead of spaces).
- Move it to ./archive/YYYY/MM/.
- If the date or company can’t be read, leave the file alone, copy it to ./failed and log it.

Rules:
- Run as --dry-run by default: print what it would do, touch nothing.
- Require an --apply flag for the real run.
- Never overwrite an existing file; append -2 instead.
- List dependencies in requirements.txt.
- When done, run it on ./samples with --dry-run and show me the output.

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

Шаг 3: итерации и тесты

Первая версия редко справляется со всеми файлами. Цикл такой:

  1. Прочитайте вывод --dry-run. Что-нибудь сопоставлено неверно?
  2. Покажите агенту проблемный файл: «samples/invoice_7.pdf получил дату 1970-01-01; в этом файле метка называется “Issue date”. Поддержи обе».
  3. Попросите добавить небольшой тест на этот случай. Хватит нескольких примеров файлов и pytest.
  4. Когда всё выглядит правильно, сначала запустите --apply на копии, потом на настоящей папке.

Для задач с Excel и CSV проверка проще: сравните число строк на входе с итогами на выходе. Пусть сам скрипт проверяет что-то вроде «в объединённом файле должно быть 1 240 строк и такая-то сумма выручки». То, что код запускается, ещё не доказывает, что он считает правильно.

Шаг 4: парсер — requests или Playwright?

Первое решение в парсинге — как устроена страница. Щёлкните правой кнопкой, выберите «Просмотр кода страницы» и поищите там нужные данные (цену, заголовок).

Если они есть в исходном коде, достаточно requests и BeautifulSoup. Они быстрые, не открывают браузер и мало нагружают сервер.

import requests
from bs4 import BeautifulSoup

HEADERS = {"User-Agent": "price-tracker/1.0 (contact@example.com)"}

resp = requests.get("https://example.com/product/123", headers=HEADERS, timeout=20)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
price = soup.select_one(".product-price")
if price is None:
    raise RuntimeError("Price element not found; the page layout may have changed")
print(price.get_text(strip=True))

Если содержимое приходит позже через JavaScript, или нужно войти, кликнуть и прокрутить, понадобится настоящий браузер. Частый выбор — Playwright:

pip install playwright
playwright install chromium

Не говорите агенту, что использовать; попросите сначала проверить:

I want the product names and prices from https://example.com/category/headphones.
First check robots.txt and the page source: is the data in the HTML, or loaded
by JavaScript? If the site has a public API or a JSON endpoint, prefer it.
Then pick the simplest approach and explain why.
Wait at least 3 seconds between requests and visit at most 5 pages.
Write the result to products.csv.

Совет: на многих сайтах, которые вы открываете через Playwright, вкладка сети браузера показывает, что данные на самом деле приходят JSON-запросом. Прямое обращение к этой конечной точке может быть надёжнее и легче, хотя условия сайта всё равно действуют.

Правовые и этические границы: robots.txt, условия, GDPR

ИИ охотно напишет код, который парсит сайт; стоит ли это делать, решаете вы. Это не юридическая консультация, а мои рабочие правила:

  • Сначала официальный API. Многие сайты, биржи, службы доставки и госорганы отдают данные через API. Он стабильнее, его правила прописаны явно, и он не ломается при смене дизайна страницы.
  • Читайте robots.txt и условия использования. Если условия запрещают автоматический доступ или robots.txt закрывает путь, не делайте этого. Парсинг страниц за логином обычно нарушает условия.
  • Держитесь подальше от персональных данных. Сбор имён, телефонов или адресов почты подпадает под GDPR (а в Турции под KVKK); без цели, правового основания и срока хранения не собирайте их.
  • Не спешите. Делайте паузу в несколько секунд между запросами, отправляйте по одному, не загружайте повторно страницы, которые у вас уже есть. Используйте User-Agent, который вас идентифицирует.
  • Помните об авторском праве. Следить за ценой для себя — одно, а копировать чужой контент и публиковать его заново — другое.
  • Не воюйте с защитой. Решение CAPTCHA, ротация IP или обход защиты входа — признаки того, что сайт не хочет вас видеть.

Шаг 5: ошибки, повторы и оповещения

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

Harden the script for daily use:
- Add timeouts to network requests; on transient errors (connection error, 429, 5xx)
  retry up to 3 times with increasing waits. Don’t retry 4xx errors.
- Log every run to logs/YYYY-MM-DD.log.
- Treat zero results, or a missing expected field, as an error.
- On error, email me using the SMTP settings in .env, with a summary of the error
  and the path of the log file.
- Send nothing on success.

«Нулевой результат — это ошибка» — правило, которое окупается больше всего. Большинство парсеров при поломке не падают, а выдают пустой CSV. Вместо почты можно использовать вебхуки и API ботов Slack или Telegram; выберите то, что вы действительно заметите.

Шаг 6: расписание через cron

Когда скрипт готов, самый простой способ запускать его регулярно на macOS и Linux — cron. Выполните crontab -e и добавьте:

# Run every day at 08:30
30 8 * * * cd /Users/you/price-tracker && .venv/bin/python track.py >> logs/cron.log 2>&1

На что обратить внимание:

  • cron не загружает окружение вашей оболочки. Используйте полный путь к Python (тот, что в виртуальном окружении) и делайте cd в папку.
  • cron не работает, пока компьютер спит. Для задач, которые должны выполняться каждый день, надёжнее небольшой Linux-сервер или запланированный workflow GitHub Actions.
  • На Windows ту же работу делает Планировщик заданий; попросите у агента файл .bat и шаги настройки.
  • Первую неделю проверяйте логи каждый день.

В чём ИИ обычно ошибается

  • Выдумывает селекторы. Не видя страницы, агент угадывает CSS-класс вроде .price. Дайте ему настоящий HTML или попросите скачать и изучить страницу.
  • Глотает ошибки. Блок except: pass создаёт впечатление, что скрипт работает, хотя он ничего не делает. Читайте каждую строку except.
  • Форматы дат и чисел. Числа в европейском стиле 1.234,56 и даты DD/MM/YYYY часто читаются неверно. Сверьте несколько значений на выходе с источником вручную.
  • Кодировка. Если CSV с диакритическими или кириллическими символами выглядит искажённым, попросите попробовать utf-8-sig или нужную старую кодировку.
  • Чрезмерно уверенные сообщения об успехе. «Скрипт готов и протестирован» само по себе не доказательство. Посмотрите на результат сами.
  • Слишком много зависимостей. Запускать автоматизацию браузера или фреймворк ради задачи на десять строк. Просите самое простое решение.

Безопасность

  • Секреты хранятся в .env. Пароли SMTP, API-ключи и логины никогда не пишутся в код; читайте их из .env через python-dotenv и добавьте .env в .gitignore. Коммитьте .env.example с фиктивными значениями.
  • Никогда не вставляйте ключ в чат. Не пишите агенту «мой ключ — …». Разговоры могут сохраняться и попадать в логи. Давайте только имя переменной: «читай её из переменной окружения SMTP_PASSWORD».
  • Читайте команды, которые запускает агент. Особенно rm, массовый mv, pip install незнакомых пакетов и всё, что отправляет данные наружу. Если не уверены, не одобряйте.
  • Минимум прав. Используйте пароль приложения для почтового аккаунта и ключ только для чтения для API.

Как это делается в AgentVera

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

  • Разные агенты, разные папки. В рабочем пространстве Claude Code может писать парсер в одной панели, пока Codex собирает отчёт Excel в другой. Если у них общий репозиторий, дайте каждому свой git worktree, чтобы избежать конфликтов.
  • Браузер агента. Агенты с Playwright управляют Chrome с собственным профилем, а вы наблюдаете за их действиями вживую в браузере агента. Так проще понять, почему селектор не совпадает.
  • Запуск на сервере. На странице SSH и SFTP можно скопировать скрипт на сервер и настроить там crontab.
  • Запланированные сообщения агенту. Запланированные задачи планируют сообщение агенту, а не ваш скрипт. Например, раз в неделю: «прочитай логи и кратко опиши сбои». Ежедневный запуск по-прежнему должен делать cron.
  • Просмотр diff. Ревью кода проверяет каждый завершённый ход, что помогает ловить проглоченные ошибки на шаге усиления надёжности.

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

Краткий чек-лист

  • Вход, выход и граничные случаи записаны в первом промпте
  • Пробный запуск по умолчанию, без перезаписи
  • Проверено на примерах файлов, несколько результатов сверены вручную
  • Официальный API предпочтён, где он есть; robots.txt и условия прочитаны
  • Паузы между запросами, таймауты и ограниченные повторы
  • Нулевой результат считается сбоем, сбои отправляют оповещение
  • Секреты в .env, .env вне git
  • Полные пути в строке cron, логи проверены в первую неделю

Подводим итоги

Секрет автоматизаций с ИИ в том, чтобы дать агенту небольшую, хорошо описанную задачу, а потом относиться к написанному скрипту как к программному обеспечению: пробные запуски, тесты, логи, оповещения. В парсинге технический выбор прост (requests, если данные в исходном коде, иначе Playwright); труднее соблюдать границы и выбирать официальный путь там, где он есть. Для первой автоматизации возьмите задачу, которую вы делали вручную трижды на этой неделе, адаптируйте промпт выше и начните с пробного запуска.

Вопросы

Можно ли создавать автоматизации с ИИ, если я не умею программировать?

Простые автоматизации можно: вы описываете задачу агенту, он пишет скрипт на Python, а вы проверяете его на примерах файлов. Но умение прочитать, что делает скрипт, всё равно помогает заметить неверный результат.

Законен ли веб-скрейпинг?

Зависит от случая. Получать открытые данные в разумном темпе во многих случаях допустимо, но условия использования сайта, robots.txt, авторское право и законы о персональных данных (GDPR, KVKK) ставят границы. Если у сайта есть официальный API, сначала используйте его.

Что выбрать: requests и BeautifulSoup или Playwright?

Если данные есть в HTML-коде страницы, requests и BeautifulSoup быстрее и легче. Если содержимое подгружается JavaScript или нужно войти в аккаунт или кликнуть, берите настоящий браузер вроде Playwright.

Как запускать скрипт автоматизации каждый день?

На macOS и Linux используйте cron, на Windows — Планировщик заданий. Если скрипт должен работать при выключенном компьютере, перенесите его на небольшой сервер или в запланированное задание CI, например GitHub Actions.

Как узнать, что мой парсер сломался?

Пусть скрипт при сбое отправляет письмо, сообщение в Slack или Telegram, и считайте ошибками также тихие сбои вроде «найдено ноль строк». Запись каждого запуска в лог-файл позволяет легко понять, когда началась проблема.

Соберите своих агентов за одним столом.

Скачайте AgentVera бесплатно; ваши установленные CLI уже готовы к работе.

Другие статьи