projects/org/@biz-lideravto/it/euroauto/CLAUDE.md

euroauto — Парсинг euroauto.ru

Тип: Подпроект (сбор данных)
Источник: spb.euroauto.ru
Цель: Собрать полную базу деталей грузовиков с совместимостью для импорта в Drupal-каталог
Статус: Ожидание капчи → запуск полного скрапинга (56 200 URL)
Обновлено: 2026-03-26


← Назад в IT


СТРУКТУРА

euroauto/
├── CLAUDE.md               Ты здесь

├── docs/
   ├── SCRAPING.md         Главное ТЗ: масштаб, поля, схема БД, алгоритм
   ├── ANALYSIS.md        Анализ структуры euroauto.ru
   └── HIERARCHY.md       Иерархия категорий euroauto

├── scripts/
   
   ├──  ОБРАБОТКА ДАННЫХ (pipeline) 
   ├── s0_merge_all.py     Шаг 0: Сборка всех источников  euroauto.sqlite
   ├── p1_filter.py        Шаг 1: Фильтр (убрать легковые)  p1_filtered.sqlite
   ├── p2_merge.py         Шаг 2: Единые названия (name_full)  p2_merged.sqlite
   ├── p3_aggregate.py     Шаг 3: Единые URL/OEM/аналоги  p3_final.sqlite
                              + p3_report.txt (какие модели не спарсены)
   
   ├──  СКРАПИНГ 
   ├── scraper.py          СКРАПЕР: браузерный v8 (Playwright CDP, детали)
   ├── catalog_parser.py     ПАРСЕР: серверный (httpx, без браузера)
   ├── catalog_discover.py   СКРАПЕР КАТАЛОГА: браузерный (Playwright CDP)
   ├── gen_urls.py           Генератор URL: catalog_models.json  URL-список
   ├── launch_scraper.sh     Запуск скрапера через коннектор
   ├── s1_rescrape.py        Доскрапить v7v8 (добавить attr/country)
   ├── s2_complete.py        Скрапить новые URL
   └── s3_build.py           JSONL  parts.csv + compatibility + cross_table

└── data/
    └── README.md          Где лежат данные (S3 пути)

PIPELINE ОБРАБОТКИ ДАННЫХ

# Шаг 0: Собрать все источники в единую базу
python3 scripts/s0_merge_all.py
# → /mnt/beget-s3/projects/lider/lideravto/euroauto/euroauto.sqlite

# Шаг 1: Убрать легковые, оставить только грузовые бренды
python3 scripts/p1_filter.py
# → p1_filtered.sqlite + p1_missing.txt (непокрытые модели)

# Шаг 2: Дедупликация по name_full (единые названия)
python3 scripts/p2_merge.py
# → p2_merged.sqlite

# Шаг 3: Единые URL/OEM/аналоги + анализ что недопарсено
python3 scripts/p3_aggregate.py
# → p3_final.sqlite + p3_report.txt (ФИНАЛЬНАЯ БАЗА)

Базы данных (S3: /mnt/beget-s3/projects/lider/lideravto/euroauto/)

Файл Шаг Строк Содержимое
s0_raw.sqlite s0 1 428 708 Все строки из всех источников, без дедупликации
p1_filtered.sqlite p1 Только грузовые бренды
p2_merged.sqlite p2 Дедуплицировано по name_full
p3_final.sqlite p3 ФИНАЛЬНАЯ: +OEM, +аналоги, +part_url, +models_count
p3_report.txt p3 Какие модели не спарсены → нужно допарсить

ДВА ТИПА СКРИПТОВ

ПАРСЕР (серверный, без браузера)

# Запуск прямо на сервере:
python3 scripts/catalog_parser.py                  # HTTP-запросы к euroauto.ru
python3 scripts/catalog_parser.py --fallback-only  # только из cached json
python3 scripts/s3_build.py                        # сборка финальных CSV

# Результат → /mnt/beget-s3/up/catalog_models_*.json

СКРАПЕР (браузерный, через коннектор на ПК kt)

# Запуск через launch_scraper.sh (деплоит + запускает):
bash scripts/launch_scraper.sh                     # продолжить (--resume)
bash scripts/launch_scraper.sh --fresh             # начать заново
bash scripts/launch_scraper.sh --test 20           # тест
bash scripts/launch_scraper.sh --tabs 5            # 5 вкладок

# Или вручную:
cp scripts/scraper.py /mnt/beget-s3/dl/scraper.py
# → создать run_scraper_HHMMSS.sh в dl/

# Результат → /mnt/beget-s3/up/scraped_parts_*.jsonl

ТЕКУЩИЙ СТАТУС

Метрика Значение
Прогресс скрапера 6 860 / 56 200 (12%) — очередь 56K
Записей в JSONL 141 672 (v7, без attr/country)
Полная очередь 56 200 URL (rescrape_urls_full.txt)

Pipeline (обработка данных)

Шаг Файл Строк Статус
s0 — сырые данные s0_raw.sqlite 1 428 708 ✅ готово
p1 — фильтр (грузовые) p1_filtered.sqlite ⏳ запустить
p2 — дедупликация p2_merged.sqlite
p3 — финальная база p3_final.sqlite

ДАННЫЕ (S3)

Папка всех исходных данных: /mnt/beget-s3/projects/lider/lideravto/parsing/
(56 файлов: CSV + JSONL, скопированы из up/ и upload/)

Файл Путь Содержимое
s0_raw.sqlite /mnt/beget-s3/projects/lider/lideravto/euroauto/ 1 428 708 строк, 591 MB
Текущий JSONL parsing/scraped_parts_20260325_044937.jsonl 141 672 записей
Полная очередь URL /mnt/beget-s3/dl/rescrape_urls_full.txt 56 200 URL
Старая очередь /mnt/beget-s3/dl/rescrape_urls.txt 11 632 URL
Прогресс /mnt/beget-s3/up/scraper_progress.txt done=6860
HTML-кеш ~/SERVER/dataspace/cache/euroauto/ на ПК kt

СХЕМА ДАННЫХ (итог)

parts.csv — уникальные детали

oid, name_full, article, attr, brand, part_type,
price, href, image_url, country,
category_ea, category_ru, system, node

compatibility.csv — деталь × грузовик

oid, truck_brand, truck_model, truck_mod, source_url
PK: (oid, truck_brand, truck_model, truck_mod)

cross_table.csv — кросс: тип × модель

category_ea, truck_brand, truck_model, truck_mod, part_oids, count
PK: (category_ea, truck_brand, truck_model, truck_mod)

КЛАССИФИКАЦИЯ part_type

Тип Бренды
original DAF, Volvo, Mercedes Benz, Scania, MAN, Renault, Iveco
brand Febi truck, Sampa, Auger, DT Spare Parts, Wabco, NRF truck, Vaden, EBS, ROSTAR, TruckExpert, Emmerre, Covind, Startec, Starkmeister, SORL, KS truck, Marshall
analog всё остальное

Все детали в каталоге — новые (/part/new/ в href). БУ не парсится.


СЛЕДУЮЩИЕ ШАГИ

1.  catalog_parser.py  серверный парсер создан
2.  launch_scraper.sh  запуск скрапера через коннектор
3.  56 200 URL сгенерировано (rescrape_urls_full.txt)
4.  Пройти SmartCaptcha в браузере  запустить catalog_discover.py
5.  Заменить очередь: rescrape_urls_full.txt  rescrape_urls.txt
6.  Запустить s2_complete.py (56 200 URL, всё с нуля)
7.  Запустить s3_build.py  parts.csv + compatibility.csv
8.  Импорт в Drupal через dru_lider_importer

КЛЮЧЕВЫЕ ДОКУМЕНТЫ


Версия: 1.0