Перейти к содержанию

Инструкция по анализу

🛠️ ЛИКБЕЗ: ГОРЯЧИЕ КЛАВИШИ

  • F12 (или Ctrl+Shift+I) — DevTools. Твой радар.
  • Ctrl+UИсходный код. То, что видит робот (без JS).
  • Ctrl+Shift+M (внутри F12) — Мобильный режим.
  • Ctrl+FПоиск. Работает везде.
  • F5Обновить страницу.

ЭТАП 0: УСТАНОВКА (MINDSET)

  1. Цель: Чистый JSON.
  2. Правило: Браузер (Selenium/Playwright) — это крайняя мера.
  3. Приоритет: API > Hydration > HTML > Браузер.

ЭТАП 1: РАЗВЕДКА БОЕМ (Reconnaissance)

Цель: Понять тип сайта и найти легкий путь, не копаясь в сети.

ШАГ 1. Проверка исходного кода (Static Check)

  1. Открой страницу. Нажми Ctrl+U.
  2. Жми Ctrl+F, вбей цену товара или заголовок.
    • Нашел внутри HTML-тегов? (пример: <div class="price">100</div>)
      • 👉 РЕШЕНИЕ: Это SSR. Используй ШАБЛОН №3 (Классика).
    • Нашел внутри скрипта? (пример: <script id="__NEXT_DATA__">...)
      • 👉 РЕШЕНИЕ: Это Hydration. Используй ШАБЛОН №2 (Хирург).
    • Не нашел? (Пустота или {{price}})
      • 👉 ВЫВОД: Это CSR. Данные грузятся динамически. Идем дальше.

ШАГ 2. Мобильная проба (Mobile View)

  1. Нажми F12.
  2. Нажми Ctrl+Shift+M (иконка телефона слева сверху в панели).
  3. Выбери iPhone 12.
  4. 🔴 НАЖМИ F5 (ОБНОВИТЬ)! Без этого не сработает.
  5. Анализ: Сайт стал простым HTML? Капча пропала?
    • 👉 РЕШЕНИЕ: Парсим мобильную версию через ШАБЛОН №3 или ищем API мобилки (ШАБЛОН №1).

ЭТАП 2: ПЕРЕХВАТ (Network Sniffing)

Цель: Найти скрытое API. Работаем в DevTools (F12).

ШАГ 1. Настройка Радара

  1. Открой вкладку Network.
  2. Поставь галочки:
    • Preserve log (чтобы не терять запросы при редиректе).
    • Disable cache (чтобы видеть свежие данные).
  3. Включи фильтр Fetch/XHR.

ШАГ 2. Охота на JSON

  1. Обнови страницу (F5) или кликни пагинацию.
  2. Смотри колонку Name. Ищи запросы.
  3. Кликай по строкам -> смотри вкладку Preview (справа).
    • Видишь дерево { "items": [...] } с твоими данными?
    • 👉 РЕШЕНИЕ: Это Джекпот. Используй ШАБЛОН №1 (Чистый API).
    • Важно: Сделай Right Click -> Copy as cURL, чтобы вытащить заголовки.

ШАГ 3. Проверка Вебсокетов

  1. Если в XHR пусто, а цифры на сайте бегут сами (биржи, ставки).
  2. Переключи фильтр на WS.
  3. Видишь поток данных?
    • 👉 РЕШЕНИЕ: Используй ШАБЛОН №7 (Радист).

🛠️ СХЕМА DEVTOOLS (Где что искать):

[ NETWORK TAB ]
---------------------------------------------------------
| [x] Preserve log  [x] Disable cache                   |
| Фильтры: [All] [Fetch/XHR] [JS] [WS] <-- ЖМИ СЮДА     |
|-------------------------------------------------------|
| Name          | Status | Type | Size |                |
| api/products  | 200    | json | 5kb  | <-- КЛИК ЛКМ |
| logo.png      | 200    | png  | 2kb  |                |
|-------------------------------------------------------|
| [Headers] [PREVIEW] [Response]                        |
|            ^^^^^^^                                    |
|       Смотри JSON здесь!                              |
---------------------------------------------------------

ЭТАП 3: ОЦЕНКА ОБОРОНЫ (Если API найдено, но не работает)

Сценарий: В браузере JSON открывается, а Python получает 403.

  1. Диагноз: TLS Fingerprinting (Сервер видит, что ты скрипт, а не браузер).
  2. Действие:
    • 👉 РЕШЕНИЕ: Используй ШАБЛОН №4 (Хамелеон). Библиотека curl_cffi притворится Хромом.

ЭТАП 4: ТЯЖЕЛАЯ АРТИЛЛЕРИЯ (Когда ничего не помогло)

Сценарий: Данных нет в коде, API зашифровано, HTML пустой.

  1. Случай А: Просто сложный JS (SPA)
    • Сайт тормозит, грузит контент кусками, но явной защиты (капчи) нет.
    • 👉 РЕШЕНИЕ: Используй ШАБЛОН №5 (Танк / Playwright).
    • Обязательно: Блокируй картинки (см. код шаблона).
  2. Случай Б: Агрессивная Защита
    • Playwright получает бан. Видишь "Checking your browser" или галочку Turnstile.
    • 👉 РЕШЕНИЕ: Используй ШАБЛОН №6 (Спецназ / DrissionPage).
  3. Случай В: Веб непробиваем
    • Скачай мобильное приложение бренда.
    • Поставь сниффер (Charles/Mitmproxy).
    • Поймал JSON от приложения?
    • 👉 РЕШЕНИЕ: Используй ШАБЛОН №8 (Черный ход).

🚀 СВОДНАЯ ТАБЛИЦА: КАКОЙ ШАБЛОН БРАТЬ?

Что мы нашли? Где нашли? НОМЕР ШАБЛОНА
JSON с данными Вкладка Network (XHR) №1 (Чистый API)
JSON с данными Исходный код (<script>) №2 (Хирург)
HTML с данными Исходный код (<div>) №3 (Классика)
API (ошибка 403) Network (но Python не может) №4 (Хамелеон)
Ничего (JS) Браузер рендерит №5 (Танк/Playwright)
Капча / Бан Браузер не пускает №6 (Спецназ/Drission)
Поток данных Вкладка Network (WS) №7 (Радист)
API Приложения Сниффер телефона №8 (Черный ход)

ЭТАП 6: ПРОДАКШН (Не будь джуном)

  1. Авторизация:
    • Получил куки один раз -> Сохранил в файл -> Грузишь при старте.
    • См. тему №13.
  2. Сохранение:
    • Используй буфер. Пиши в .jsonl пачками по 100 штук.
    • См. тему №14.
  3. Скорость:
    • Используй очередь asyncio.Queue. Продюсер ищет ссылки, Воркеры парсят.
    • См. тему №12.
  4. Валидация:
    • Все данные прогоняй через Pydantic. Никаких сырых словарей.
    • См. тему №11.