Skip to content

Instantly share code, notes, and snippets.

@tamvodopad
Last active January 28, 2026 16:00
Show Gist options
  • Select an option

  • Save tamvodopad/152cd467e3a306128cf056263e313c24 to your computer and use it in GitHub Desktop.

Select an option

Save tamvodopad/152cd467e3a306128cf056263e313c24 to your computer and use it in GitHub Desktop.
claude_cod_warsearch_promt

Ты — Claude Code (код-агент). Твоя задача: реализовать воспроизводимый сбор данных и сохранить итог в Excel.

ПЕРВЫЙ ШАГ (ОБЯЗАТЕЛЬНО: спроси данные, НЕ НАЧИНАЙ СБОР, пока не получишь ответы) Сначала задай пользователю ровно 5 вопросов (в одном сообщении), чтобы настроить поиск:

  1. Какой населённый пункт ищем? (точное название как “в идеале в документах”)
  2. Какие административные привязки считать “якорями”? (район/уезд/волость/регион/АССР/губерния — перечисли, что есть)
  3. Какие известные разночтения/варианты написания уже встречались? (хотя бы 3–10 примеров)
  4. Какие критерии включения? (включать только родившихся там, или также проживавших/призванных/захороненных, если география совпадает?)
  5. Нужны все участники или только определённые категории? (погибшие/пропавшие/все)

Если пользователь не отвечает на какой-то пункт — прими разумные значения по умолчанию и явно перечисли, что именно принял по умолчанию.

ПОСЛЕ ТОГО КАК ПОЛУЧИШЬ ОТВЕТЫ — ВЫПОЛНИ ЗАДАЧУ НИЖЕ.

КОНТЕКСТ / ЦЕЛЬ Нужно найти все упоминания солдат, связанных с указанным пользователем населённым пунктом (с учётом разночтений), которые участвовали во Второй мировой / Великой Отечественной войне, используя сайт https://warsearch.ru как источник, и сформировать Excel-таблицу результатов.

ЧТО ДОЛЖНО БЫТЬ НА ВЫХОДЕ Создай файл: results.xlsx со следующими листами:

Лист 1: "Итог" Колонки (строго в таком порядке):

  1. ФИО солдата
  2. Год рождения
  3. Статус участия в войне (нормализованный: убит / умер от ран / пропал без вести / плен / ранен / вернулся / жив / другое)
  4. Ссылка warsearch (на карточку/профиль на warsearch.ru)
  5. Ссылка "Память народа" (прямая, если есть)
  6. Основание “наш” (коротко: A / B / C)
  7. География (как в источнике: место рождения/призыва/жительства/др.)

Лист 2: "Кандидаты" Те, кто похож, но география не подтверждена. Колонки: ФИО,Год рождения,Причина сомнения,Ссылка warsearch,Заметка по географии

Лист 3: "Журнал" Каждая строка — одна попытка по одному варианту запроса: Вариант запроса,Попытка (1/2/3),Итоговый сигнал (A/B/C/D/НЕОПРЕДЕЛЕНО),Найдено,Включено,Исключено,Комментарий

Лист 4: "Варианты" Список всех вариантов написания, которые ты реально использовал.

ПРАВИЛА “НАШ/НЕ НАШ” (параметризуются ответами пользователя) На основе ответов пользователя зафиксируй критерии включения. По умолчанию используй:

A) Явно указано название населённого пункта (или близкий вариант) в месте рождения/проживания/призыва/захоронения B) Указаны административные “якоря” (район/регион/РВК и т.п. из ответа пользователя) + одновременно встречается короткий вариант названия (если используется “короткий” поиск) C) В карточке есть прямая ссылка на "Память народа" и она подтверждает нужную географию (или warsearch уже однозначно связывает)

Если связь не доказана — НЕ включай в "Итог", отправляй в "Кандидаты".

КРИТИЧЕСКОЕ: ЖЁСТКИЙ WAIT-РЕЖИМ (warsearch “думает”) warsearch.ru часто грузит выдачу/карточки с задержкой. Ты НЕ ИМЕЕШЬ ПРАВА писать “0 результатов” или идти дальше, пока не увидишь один из ДОКАЗАТЕЛЬНЫХ СИГНАЛОВ:

СИГНАЛЫ (для выдачи И карточек) A) На странице виден список результатов (строки/карточки/таблица) B) Видно число результатов (“найдено N” или аналог) C) Видна пагинация (страницы 1,2,3…/“следующая”) D) Виден явный текст “ничего не найдено / 0 результатов / не найдено”

Если ни A/B/C/D нет — считаем, что страница НЕ ЗАГРУЗИЛАСЬ.

ПРОТОКОЛ ОЖИДАНИЯ (для кода) После каждого действия (запрос, переход, карточка, пагинация):

  • Попытка 1: ждать 8–12 секунд + проверить A/B/C/D
  • Если нет: скролл/повторная проверка + ещё 3–5 секунд
  • Попытка 2: один refresh страницы + ждать 8–12 секунд + проверка A/B/C/D
  • Попытка 3: повторить действие + ждать 8–12 секунд + проверка A/B/C/D
  • Только если увидел D — фиксируй “0”.
  • Если после 3 попыток нет A/B/C/D — фиксируй “НЕОПРЕДЕЛЕНО” в "Журнал" и переходи дальше.

ПОВЕДЕНИЕ ДЛЯ “ОЧЕНЬ ОБЩИХ” ВАРИАНТОВ

  • Никогда не принимай результаты по коротким/общим вариантам без сужения административными “якорями”.
  • Если интерфейс позволяет — добавляй слова-якоря в запрос/фильтры.
  • Иначе отбрасывай записи без подтверждения якорей.

ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ

  1. Создай структуру:
  • scraper.py (основной скрипт)
  • requirements.txt
  • README.md (как запустить)
  • results.xlsx (генерируется)
  1. Python + Playwright (headless=false по умолчанию).
  2. Выдача: собрать ссылки на карточки со всех страниц (пагинация до конца).
  3. Карточка: извлечь ФИО, год рождения, статус (сырой), географию (сырьём), ссылку на “Память народа” (если есть), ссылку на карточку warsearch.
  4. Нормализация статуса: маппинг по ключевым словам; неизвестное → “другое”.
  5. Дедуп: ключ = нормализованное ФИО (ё→е, пробелы, регистр) + год рождения; статус конфликт → финальный приоритет: убит > умер от ран > пропал без вести > плен > ранен > вернулся > жив > другое
  6. Excel: openpyxl или pandas+openpyxl. Автофильтр, закрепить верхнюю строку, кликабельные ссылки.
  7. Ограничение скорости: паузы 0.8–1.5 сек с джиттером.

ШАГ 1 — ВАРИАНТЫ НАПИСАНИЯ На основе ответов пользователя:

  • сформируй “нормальные” варианты (дефисы/пробелы/склонения),
  • “короткие” (осторожно),
  • OCR-искажения (5–12 самых вероятных), и запиши реальный список на лист "Варианты".

ШАГ 2 — ОБХОД ВАРИАНТОВ Для каждого варианта:

  • выполнить поиск на warsearch.ru
  • соблюсти WAIT-РЕЖИМ, дождаться A/B/C/D и записать строку в "Журнал"
  • пройти пагинацию до конца, собрать карточки
  • обработать карточки с WAIT-РЕЖИМОМ, извлечь поля, решить “наш/кандидат/мимо”
  • обновлять счётчики “найдено/включено/исключено” в "Журнал"

ACCEPTANCE (критерий приёмки)

  • results.xlsx создан
  • "Итог" содержит только подтверждённых “наших”
  • "Кандидаты" содержит сомнительные с причиной
  • "Журнал" содержит строки по каждому варианту и подтверждение A/B/C/D/НЕОПРЕДЕЛЕНО
  • Код запускается одной командой и описан в README

НАЧИНАЙ Сначала задай 5 вопросов, затем после ответов — реализуй код, запусти и сгенерируй results.xlsx.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment