infra/@kt-scraper.pc/README.md

KT Scraper — скрапер через CDP

Скрапер подключается к живому Яндекс.Браузеру пользователя через Chrome DevTools Protocol.
Для Qrator выглядит как обычный пользователь — тот же браузер, те же куки, тот же TLS-отпечаток.


Как работает

Яндекс.Браузер пользователя (--remote-debugging-port=9222)
        ↓ CDP (localhost:9222)
    scraper.py
        ↓ открывает N вкладок в том же контексте
    euroauto.ru страницы
        ↓
    HTML сохраняется в кеш (~/SERVER/dataspace/cache/euroauto/)
        ↓
    part_url извлекаются → scraped_parts_*.jsonl → up/ → сервер

Ключевое: браузер не перезапускается, вкладки пользователя не трогаются.
Скрапер открывает свои вкладки в фоне в том же контексте.


Запуск

Шаг 1 — Браузер с debug-портом

Закрой Яндекс.Браузер и открой с флагом:

/opt/yandex/browser/yandex-browser --remote-debugging-port=9222

Зайди на euroauto.ru — убедись что открывается нормально.

Шаг 2 — Тест (5 страниц, 2 воркера)

python3 ~/SERVER/dataspace/dl/scraper.py --test 5 --workers 2

Смотри в терминале: статус каждой страницы, сколько part URL найдено.

Шаг 3 — Полный прогон

python3 ~/SERVER/dataspace/dl/scraper.py --workers 5 --delay 2

Продолжить после остановки

python3 ~/SERVER/dataspace/dl/scraper.py --workers 5 --resume

Параметры

Параметр По умолчанию Описание
--workers N 3 Параллельных вкладок
--delay N 2.0 Секунд между запросами на воркер
--resume Продолжить с последней позиции
--no-cache Не сохранять HTML на диск
--test N Скрапить только первые N URL

Рекомендуемые workers:
- --workers 3 — безопасно, 3 × 2с = ~6 500 запросов/час
- --workers 5 — быстро, 5 × 2с = ~9 000 запросов/час
- --workers 10 — максимум, рискованно если Qrator считает запросы по сессии


Кеш HTML

Каждая страница сохраняется как HTML-файл:

~/SERVER/dataspace/cache/euroauto/
├── ab/
│   └── abcd1234...html    ← HTML страницы
├── cd/
│   └── cdef5678...html
└── ...

Имя файла = MD5 от URL. Если файл уже есть — страница не запрашивается повторно.

Зачем:
- Переразбор данных без повторного скрапинга
- Анализ структуры страниц
- Отладка парсера

Объём: ~100KB × 11 632 страниц ≈ 1.1 GB

Перенастроить путь кеша: в scraper.py изменить CACHE_DIR:

CACHE_DIR = Path("/другой/путь/euroauto")

Выходные данные

Файл Где Что
scraped_parts_TIMESTAMP.jsonl up/ part URL + источник (JSONL)
scraper_progress.txt up/ Прогресс: done=1234
cache/euroauto/**/*.html cache/ HTML-кеш страниц

Формат JSONL:

{"part_url": "/part/new/12345/", "source": "https://spb.euroauto.ru/catalog/..."}

После завершения

Файл scraped_parts_*.jsonl попадает в up/ → через коннектор rsync-ится на сервер → обрабатывается:

# На сервере: смотрим что набрали
wc -l /mnt/beget-s3/up/scraped_parts_*.jsonl

# Склейка и дедупликация
python3 /opt/claude-workspace/projects/org/@biz-lideravto/it/scripts/merge_scraped.py

Диагностика

Ошибка "нет подключения к браузеру":

curl http://localhost:9222/json/version   # проверить порт

→ Перезапусти браузер с --remote-debugging-port=9222

Qrator блокирует (HTML < 3000 байт):
- Уменьши workers: --workers 2
- Увеличь delay: --delay 5
- Перезайди на euroauto.ru в браузере вручную

Продолжить после сбоя:

python3 scraper.py --resume

Кеш сохранён — уже скачанные страницы не будут запрашиваться повторно.


Структура

infra/@kt-scraper.pc/
├── README.md        этот файл
└── scraper.py       скрапер

Актуальная копия для ПК всегда в dl/ (кладётся через коннектор):

~/SERVER/dataspace/dl/scraper.py