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

URL: https://agentvera.dev/ru/blog/build-automation-scraper-with-ai/ · Опубликовано: 2026-10-11

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

**Коротко:**

- Агент пишет скрипт один раз, а дальше скрипт работает без ИИ; большинству задач хватает 50–200 строк, с пробным запуском по умолчанию и без перезаписи файлов.
- Берите requests и BeautifulSoup, если данные есть в исходном коде страницы, и Playwright, если их подгружает JavaScript или нужен вход; предпочитайте официальный API и уважайте robots.txt.
- Считайте нулевой результат ошибкой и отправляйте оповещение, повторяйте временные ошибки до 3 раз и давайте cron полные пути: пока компьютер спит, он не работает.

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

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

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

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

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

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

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

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

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

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

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

```bash
# 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: первый промпт

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

```text
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`. Они быстрые, не открывают браузер и мало нагружают сервер.

```python
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:

```bash
pip install playwright
playwright install chromium
```

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

```text
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: ошибки, повторы и оповещения

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

```text
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` и добавьте:

```bash
# 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](/ru/download/): он упрощает несколько шагов:

- **Разные агенты, разные папки.** В [рабочем пространстве](/ru/features/workspace/) Claude Code может писать парсер в одной панели, пока Codex собирает отчёт Excel в другой. Если у них общий репозиторий, дайте каждому свой [git worktree](/ru/glossary/git-worktree/), чтобы избежать конфликтов.
- **Браузер агента.** Агенты с Playwright управляют Chrome с собственным профилем, а вы наблюдаете за их действиями вживую в [браузере агента](/ru/features/agent-browser/). Так проще понять, почему селектор не совпадает.
- **Запуск на сервере.** На странице [SSH и SFTP](/ru/features/ssh-and-sftp/) можно скопировать скрипт на сервер и настроить там crontab.
- **Запланированные сообщения агенту.** [Запланированные задачи](/ru/features/scheduled-tasks/) планируют сообщение агенту, а не ваш скрипт. Например, раз в неделю: «прочитай логи и кратко опиши сбои». Ежедневный запуск по-прежнему должен делать cron.
- **Просмотр diff.** [Ревью кода](/ru/features/code-review/) проверяет каждый завершённый ход, что помогает ловить проглоченные ошибки на шаге усиления надёжности.

Если хотите связать агентов в цепочку, смотрите [конвейеры рабочего процесса ИИ-агентов](/ru/blog/ai-agent-workflow-pipeline/); чтобы подключить агента к внешним инструментам, смотрите [что такое MCP-сервер](/ru/blog/what-is-mcp-server/).

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

- [ ] Вход, выход и граничные случаи записаны в первом промпте
- [ ] Пробный запуск по умолчанию, без перезаписи
- [ ] Проверено на примерах файлов, несколько результатов сверены вручную
- [ ] Официальный 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.** AgentVera — настольное приложение для macOS, Windows и Linux от Solviera Teknoloji. Оно запускает 18 ИИ-агентов для программирования (Claude Code, Codex, Gemini CLI, Copilot, Cursor, Antigravity, opencode, Hermes, Qwen Code, Kimi Code, Kiro, Amp, Droid, Goose, Vibe, Crush, Aider, Cline) рядом, по проектам, в настоящих терминалах с собственными установками CLI и входами пользователя. В бесплатном тарифе количество агентов не ограничено. Скачать: https://agentvera.dev/ru/download/ · Цены: https://agentvera.dev/ru/pricing/
