Постановка задачи
Требуется разработать парсер для 5 интернет-магазинов (адреса будут предоставлены исполнителю), который в автоматическом режиме (раз в час) собирает информацию о товарах, сравнивает цены, рассчитывает разницу между минимальной и максимальной ценой, находит дубликаты (повторяющиеся записи) и исключает их (оставляет либо самую низкую цену, либо первую встреченную - уточнить заказчиком). Обязательно наличие интерфейса: кнопка экспорта итоговой таблицы в формат Microsoft Excel (.xlsx) с корректной структурой столбцов.
Примерный функционал
Ядро парсера
- Поддержка одновременного парсинга 5 магазинов (рекомендуется асинхронный подход, например, asyncio + aiohttp).
- Сбор данных: артикул, название товара, цена, ссылка.
- Логирование ошибок при недоступности сайта или блочном парсере.
Логика обработки
- Исключение повторов: если один и тот же (или с высокой долей схожести) товар найден на нескольких сайтах, система оставляет одну запись (как послело).
- Сравнение цен по каждому товару: расчёт разницы (абсолютной и в процентах) между минимальной и максимальной ценой.
- Автоматический запуск каждые 60 минут по расписанию (встроенный планировщик или фонового таска).
Пользовательский интерфейс
- Легковесное веб-приложение (FastAPI / Flask) или консольное приложение с кнопками (например, на PySimpleGUI/Tkinter). Веб-форма удобнее для работы.
- Кнопка «Экспорт в Excel» сразу формирует XLSX со всеми данными (или только готовый срез).
- Дополнительно: желательно датагрид для просмотра результатов внутри окна браузера.
Ожидаемый стек разработки
- Python 3.10+
- Для парсинга: BeautifulSoup4 (парсинг HTML) + реализация под административные/плохие сайты (cookies, random headеrs, прокси).
- Для скачивания страниц: aiohttp или версия requests при очень небольшом размере.
- Для расписания: schedule, APScheduler или уже встроен в фреймворк (например, BackgroundScheduler из FastСron).
- Для Экспорта главного документа: OpenPyXl или XlsxWriter.
- Исключение повторов: через ISBN, артикул или алгоритм Fuzzy Match при совпадении названия >90%.
- Для веб-части: FastAPI / Flask (стандартный райд для подобных задач).
Дополнительные пожелания
- Готовность показать пример, выполненного реальных аналогичного проекта (можно продемонстрировать как аренту из реальной жизни).