3.6 KiB
3.6 KiB
IAAI Scraper
Скрапер публичного листинга автомобилей с сайта IAAI. Собирает данные карточек через Playwright, парсит HTML и перехваченные JSON ответы, нормализует и сохраняет в SQLite (или другую БД через SQLAlchemy).
Работает последовательно одна машина за раз, с паузами между запросами.
Что делает
- Открывает страницу листинга
Vehiclelisting/Cars, собирает ссылки на карточки. - Переходит на каждую карточку, перехватывает XHR/fetch JSON-ответы.
- Парсит DOM-текст,
<title>, встроенные<script>с JSON, сетевые payload'ы. - Маппит всё в единую структуру
CarRecord(pydantic) с нормализацией полей. - Делает upsert в БД по
origin_id, сравниваяcontent_hashчтобы не перезаписывать одинаковые данные.
Структура проекта
iaai_scraper/
├── browser/
│ ├── factory.py # запуск Chrome/Chromium с desktop-фингерпринтом
│ ├── network.py # перехват XHR/fetch, фильтрация и категоризация JSON
│ └── pace.py # паузы между действиями
├── core/
│ ├── config.py # настройки из .env
│ ├── logs.py # setup logging
│ ├── retry.py # retry-декоратор
│ └── utils.py # regex, deep_find_key, save_to_json
├── parsing/
│ ├── parser.py # DOM + JSON парсинг
│ └── mapper.py # нормализация в CarRecord
├── storage/
│ ├── models.py # ORM: cars, images, sync_runs
│ ├── schemas.py # pydantic-схемы
│ ├── db.py # upsert с content_hash
│ ├── listing.py # сбор ссылок из листинга
│ └── enums.py # enum-значения для БД
├── scraper.py # главный модуль
└── cli.py # CLI (argparse)
Установка
pip install -r requirements.txt
python -m playwright install chromium
Настройка
Создайте .env на основе .env.example:
IAAI_HEADLESS=true
IAAI_DATABASE_URL=sqlite:///iaai_scraper.db
Все настройки (pacing, лимиты, gentle mode) задаются через переменные окружения .env.example.
Команды
# создать таблицы
python main.py init-db
# собрать ссылки из листинга
python main.py collect-listing --make Toyota --model Camry --output listing.json
# scrape одной карточки
python main.py scrape-vehicle "https://www.iaai.com/VehicleDetail/41180634~US" --output result.json
# scrape + запись в БД
python main.py sync-vehicle "https://www.iaai.com/VehicleDetail/41180634~US" --lane iaai
# массовая синхронизация листинга
python main.py sync-listing --make Toyota --model Camry --lane iaai_cars
# daemon-режим (цикл каждые N минут)
python main.py run-daemon --interval 60
Тесты
pytest tests -q
Docker
docker compose build
docker compose run --rm iaai-scraper python main.py --help