Подписывайтесь:

Блог AST-SoftPro

Python для автоматизации: как сократить рутинные задачи на 80%

16.05.2026 6 мин чтения
Python для автоматизации: как сократить рутинные задачи на 80%

Введение в автоматизацию с Python

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

Python является одним из наиболее популярных языков для автоматизации благодаря своей простоте, читаемости кода и большому количеству готовых библиотек. Он позволяет быстро реализовать решения как для локальных задач (обработка файлов), так и для взаимодействия с внешними системами (парсинг данных, API).

В этой статье рассмотрены три основных направления: парсинг внешних источников, обработка файлов и настройка планировщика задач на Python.

Парсинг данных — извлечение информации из веб-источников

Часто компании сталкиваются с необходимостью регулярно собирать данные из открытых или закрытых ресурсов (каталоги поставщиков, публичные API, формы заявок). Ручной сбор такой информации занимает много времени и подвержен ошибкам.

Пример: парсинг таблиц на сайте

Предположим, нужно ежедневно извлекать список товаров со страницы https://example.com/products, где информация представлена в виде HTML-таблицы. Цель — сохранить данные в формате CSV для дальнейшего анализа.

import requests
from bs4 import BeautifulSoup
import csv

def parse_products(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    table = soup.find('table', {'id': 'products-table'})

    rows = []
    for row in table.find_all('tr')[1:]:  # пропускаем заголовок таблицы
        cols = row.find_all('td')
        product_name = cols[0].get_text(strip=True)
        price = float(cols[1].get_text().replace(',', '.').strip()) if cols[1].text.replace('.', '').isdigit() else None
        rows.append({'name': product_name, 'price': price})
    return rows

def save_to_csv(data, filename='products.csv'):
    with open(filename, mode='w', encoding='utf-8', newline='') as file:
        writer = csv.DictWriter(file, fieldnames=['name', 'price'])
        writer.writeheader()
        writer.writerows(data)

# Использование
url = "https://example.com/products"
products = parse_products(url)
save_to_csv(products)

Этот скрипт:
- отправляет HTTP-запрос к странице,
- парсит HTML с помощью BeautifulSoup,
- извлекает строки из таблицы, исключая заголовок,
- сохраняет данные в CSV-файл.

⚠️ Важно: при работе с сайтами проверяйте наличие robots.txt и условия использования — автоматический сбор данных может нарушать правила владельца ресурса.

Альтернатива: использование pandas для анализа таблиц

Если структура таблицы соответствует табличным данным (например, Excel или HTML-таблица), можно использовать библиотеку pandas, которая упрощает обработку:

import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

def scrape_with_selenium(url):
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')  # без GUI, только в фоне
    driver = webdriver.Chrome(options=options)
    try:
        driver.get(url)
        table_html = driver.find_element(By.ID, "products-table").get_attribute('outerHTML')
        return pd.read_html(table_html)[0]  # возвращает DataFrame
    finally:
        driver.quit()

df = scrape_with_selenium("https://example.com/products")
df.to_csv('output.csv', index=False)

Такой подход полезен, когда BeautifulSoup не может корректно обработать динамически подгруженные таблицы (например, через JavaScript). Selenium имитирует поведение браузера и позволяет получить актуальный HTML.

Обработка файлов — автоматизация рутинных операций с локальной информацией

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

Пример 1: преобразование CSV в JSON для интеграции

Допустим, система принимает данные через API в формате JSON, но исходные файлы приходят в виде sales.csv. Необходимо автоматически конвертировать его в структуру, пригодную для отправки.

import pandas as pd
import json

def csv_to_json(csv_filepath, json_output):
    df = pd.read_csv(csv_filepath)
    # Преобразуем строки с датами к нужному формату (ISO 8601)
    if 'date' in df.columns:
        try:
            df['date'] = pd.to_datetime(df['date']).dt.strftime('%Y-%m-%dT%H:%M:%S')
        except ValueError:
            pass
    data_list = df.to_dict(orient='records')
    with open(json_output, 'w', encoding='utf-8') as f:
        json.dump(data_list, f, indent=2, ensure_ascii=False)

csv_to_json('sales.csv', 'sales.json')

Код:
- читает CSV-файл,
- конвертирует столбец date в стандартный формат ISO 8601 (требуется для API),
- сохраняет результат как JSON с отступами для читаемости.

Пример 2: обработка Excel-файлов из папки

Если ежедневно поступают файлы report_*.xlsx, нужно автоматизировать извлечение нужных столбцов и сохранение в единый формат.

import os
from openpyxl import load_workbook

def process_xlsx_folder(input_dir, output_file):
    all_data = []
    for file in os.listdir(input_dir):
        if file.endswith('.xlsx'):
            try:
                wb = load_workbook(os.path.join(input_dir, file))
                sheet = wb.active
                # Извлекаем строки (кроме заголовка)
                rows = []
                for row in sheet.iter_rows(min_row=2):  # skip header
                    values = [cell.value for cell in row]
                    if all(v is not None for v in values[:3]):  # проверяем наличие данных в первых трёх колонках
                        rows.append(values)
                all_data.extend(rows)
            except Exception as e:
                print(f"Ошибка чтения {file}: {e}")
    with open(output_file, 'w', encoding='utf-8') as f:
        for row in all_data:
            f.write('; '.join(map(str, row)) + '
')  # разделитель по выбору системы

process_xlsx_folder('reports/', 'aggregated.txt')

Скрипт обрабатывает все .xlsx-файлы в указанной папке и объединяет их строки (кроме заголовков), сохраняя результат в текстовом формате с разделителем ;. Это может использоваться, например, для объединения отчётов разных отделов.

💡 Совет: при работе с большими объёмами файлов добавьте логику повторных запусков (например, через флаг обработанных имён) и обработку исключений — это предотвратит потери данных.

Настройка планировщика задач — автоматизация по расписанию

Даже если скрипт работает корректно, его выполнение зависит от человека. Чтобы обеспечить регулярность, используется планировщик задач: cron на Linux/macOS или Task Scheduler в Windows.

Пример: запуск скрипта парсинга каждый день в 8 утра

Для автоматизации запуска Python-скриптов по расписанию можно использовать schedule — легковесную библиотеку для Python:

import schedule
import time
from datetime import datetime

def job():
    print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] Запуск парсинга...", flush=True)
    # Вызов функций из предыдущего примера
    products = parse_products("https://example.com/products")
    save_to_csv(products, 'daily_output.csv')
    print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] Парсинг завершён.", flush=True)

# Запланировать выполнение каждые 24 часа в 8:00 утра (UTC+3 — нужно скорректировать)
schedule.every().day.at('08:00').do(job)  # время указано локально, schedule работает в UTC

total_time = time.time() + 1 * 60 * 60  # ждём минуту для первого запуска
while True:
    schedule.run_pending()  # проверяет расписание на текущий момент
    if total_time < time.time():
        break
    time.sleep(5)

⚠️ Важно: schedule работает в локальном времени, но интерпретирует его как UTC. Если нужно работать по местному времени (например, +3 часа), лучше использовать системные планировщики:
- Linux/macOS: /etc/crontab или systemd timer,
- Windows: «Планировщик заданий».

Пример с использованием cron (Linux)

Допустим, скрипт хранится в /home/user/scripts/parser.py. Чтобы запускать его ежедневно в 8 утра:

# Открываем crontab
crontab -e

# Добавляем строку: выполнить python-скрипт каждый день в 08:00 (UTC)
crontab file содержит:
0 8 * * * /usr/bin/python3 /home/user/scripts/parser.py >> /var/log/parser.log 2>&1

🔍 Пояснение:
- 0 — минута,
- 8 — час (в UTC),
- * — любой день месяца, месяц и день недели.

Логирование (>> /var/log/parser.log 2>&1) позволяет отслеживать ошибки. При сбое Python-скрипта лог покажет traceback, что упрощает диагностику.

Автоматизация через системные службы (на примере systemd)

Для более надёжной автоматизации можно зарегистрировать скрипт как сервис:

# /etc/systemd/system/daily-parser.service
[Unit]
Description=Ежедневный парсинг продуктов
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/user/scripts/parser.py --log-file daily_output.log
Restart=on-failure  # перезапустить, если скрипт упал
User=nobody
StandardOutput=append:/var/log/daily-parser.out
StandardError=append:/var/log/daily-parser.err
[Install]
WantedBy=multi-user.target

После этого:
- sudo systemctl daemon-reload — обновить конфигурацию,
- sudo systemctl enable daily-parser.service — включить запуск при старте системы,
- sudo systemctl start daily-parser.service — запустить вручную.

✅ Преимущество systemd: автоматический перезапуск, контроль состояния (systemctl status, journalctl -u daily-parser.service), интеграция с системными логами.

Рекомендации по построению надёжных автоматизированных решений

При создании скриптов для автоматизации следует придерживаться нескольких принципов:

Принцип Описание
Обработка ошибок Всегда используйте try-except и логируйте ошибки. Не допускайте падения всего процесса из-за одной неисправной операции.
Валидация входных данных Проверяйте формат, наличие обязательных полей (например, через pandas.DataFrame.isnull().sum()).
Логирование действий Фиксируйте время запуска, статус выполнения и ошибки в отдельный лог-файл или систему мониторинга.
Тестирование на малых объёмах Перед запуском на реальных данных протестируйте скрипт на 1–2 файлах вручную.
Контроль версий Храните скрипты в системе контроля (Git), чтобы отслеживать изменения и быстро восстанавливать версию при сбое.

Пример простой системы логирования:

import logging

def setup_logger(name, log_file):
    logger = logging.getLogger(name)
    logger.setLevel(logging.INFO)
    handler = logging.FileHandler(log_file, encoding='utf-8')
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    return logger

logger = setup_logger('parser', 'logs/parser.log')
try:
    # основная логика
except Exception as e:
    logger.error(f"Ошибка: {e}")  # будет записано в файл

Заключение

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

Рассмотренные примеры показывают:
- как парсить веб-сайты,
- обрабатывать локальные файлы (CSV, Excel),
- запускать скрипты по расписанию через системные планировщики или cron/systemd.

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

Python предоставляет гибкие инструменты для таких задач без необходимости глубокого знания сложных систем управления процессами.

AI-Помощник