Найти в Дзене
PharmaDataLab

Парсинг цен с сайтов аптечных сетей: архитектура решения

Парсинг цен с сайтов аптечных сетей: архитектура решения Недавно я писал, что получил диплом Data Engineer, сегодня хочу рассказать про дипломную работу, в частности про архитектуру моего решения. Ниже распишу пайплайн и выложу частичный код, вы можете переиспользовать его и создать собственное приложение. Тема была: парсинг цен с сайтов аптечных сетей Основная идея - это собирать цены по определённому скоупу номенклатуры предоставляя доступ к данным в дашборде со свободным доступом. Изначально я решил выбрать скю по категории противодиарейных препаратов, как одной из самой крупных АТС-3 групп по объёму продаж. Из аптечных сетей взял топ-10 по продажам: апрель, ригла, планета здоровья….остальных вы сами знаете :) Главным условием была полная автоматизация. Для проекта нам нужно: 1️⃣ Поднять сервер (виртуальную машину: min 8cpu, 24ram, 100gb) 2️⃣ Создать кастомный docker image 3️⃣ Развернуть gitlab через omnibus (как сервис, ибо через докер сжирает овердофига ресурсов) Пайплайн

Парсинг цен с сайтов аптечных сетей: архитектура решения

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

Тема была: парсинг цен с сайтов аптечных сетей

Основная идея - это собирать цены по определённому скоупу номенклатуры предоставляя доступ к данным в дашборде со свободным доступом.

Изначально я решил выбрать скю по категории противодиарейных препаратов, как одной из самой крупных АТС-3 групп по объёму продаж.

Из аптечных сетей взял топ-10 по продажам: апрель, ригла, планета здоровья….остальных вы сами знаете :)

Главным условием была полная автоматизация.

Для проекта нам нужно:

1️⃣ Поднять сервер (виртуальную машину: min 8cpu, 24ram, 100gb)

2️⃣ Создать кастомный docker image

3️⃣ Развернуть gitlab через omnibus (как сервис, ибо через докер сжирает овердофига ресурсов)

Пайплайн выглядит так:

airflow запускает даг по расписанию

⬇️

парсер собирает цены

⬇️

данные записываются в postgres в staging (t0 слой)

⬇️

следом запускается скрипт по триггеру на пополнение таблиц из t0, данные обрабатываются и формируется витрина в t1

⬇️

данные прорастают в дашборд

Кастомный docker image:

➡️ docker-compose.yaml

# Selenium Hub

selenium-hub:

image: selenium/hub:4.34.0-20250717

container_name: selenium-hub

ports:

- "4442:4442"

- "4443:4443"

- "4444:4444"

networks:

- hipposcan-network

chrome-node-1:

image: selenium/node-chrome:4.34.0-20250717

platform: linux/amd64

shm_size: 2gb

depends_on:

- selenium-hub

environment:

- HUB_HOST=selenium-hub

- SE_EVENT_BUS_HOST=selenium-hub

- SE_EVENT_BUS_PUBLISH_PORT=4442

- SE_EVENT_BUS_SUBSCRIBE_PORT=4443

- SE_VNC_PASSWORD=hippo2025

networks:

- hipposcan-network

ports:

- 7901:7900

➡️ Dockerfile

FROM apache/airflow:2.9.3

USER root

# Install system dependencies if needed

RUN apt-get update && apt-get install -y \

&& apt-get clean \

&& rm -rf /var/lib/apt/lists/*

USER airflow

# Install Python dependencies

COPY requirements.txt /tmp/requirements.txt

RUN pip install --no-cache-dir -r /tmp/requirements.txt

➡️ requirements

selenium

beautifulsoup4

pandas

psycopg2-binary

undetected-chromedriver

➡️ Readme

Architecture

- Airflow 2.9.3 - DAG orchestration

- Selenium Grid - Chrome browser automation

- PostgreSQL - Data storage (separate from Airflow metadata)

Для визуализации данных я использовал Tableau.

Загрузил дашборд в паблик с данными за несколько дней.

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

🚀 Отмечу, что тут представлена лишь малая часть кода, которая описывает инфраструктурную составляющую, а есть ещё питонячий код с парсерами написанными на Selenium, но в любом случае сама архитектура оптимальная и рабочая, можете брать за основу.

🔥 Всем удачи!