Skip to content

bug: top_popular/top_related экспортируются пустыми при 200 строках в DOM (DOM≠экспорт, воспроизведено живьём 2/2) #31

Description

@axisrow

Симптом

Живой прогон (2 из 2, monthly и daily): top_popular и top_related скачиваются успешно — ⬇️ File download starting, Download completed, Tracked download, исключений нет, exit code 0 — но файл содержит только заголовок: 219 и 212 байт, 0 строк данных. dynamics (24 строки) и regions (755 строк) в тех же прогонах приходят полными.

Почему это баг, а не пустая выдача Вордстата

Проверено вручную через CDP, в обход нашего CLI, на той же фразе и том же регионе, на view=table/popular: TABLE_ROW_SELECTOR возвращает 200 реальных строк с данными («новогодние подарки» — 41446 и т.д., не заглушки).

То есть Вордстат данные имеет и отрисовывает, а в CSV они не попадают. Это расхождение между DOM и экспортом, а не отсутствие данных.

Что это опровергает

Ранее по коду утверждалось: предзагрузочный гейт document.querySelectorAll(TABLE_ROW_SELECTOR).length > 0 в collector.py применяется в том числе к top_popular, следовательно успешное прохождение гейта доказывает непустой экспорт.

Вывод неверен. Гейт действительно проходит — строки в DOM есть, это подтверждено и гейтом, и ручной проверкой. Но экспорт всё равно пуст. «Гейт прошёл» и «экспорт непустой» — независимые утверждения; из первого второе не следует.

Связь с существующими issue

Тот же класс, что #11 и #22 (DOM≠экспорт race), но здесь он воспроизведён живьём, а не выведен из документации: 2/2 прогона плюс ручная проверка через CDP.

Почему проходит молча

PR #25 сузил _is_untrustworthy_empty_export до одной DYNAMICS:

return view is WordstatView.DYNAMICS and not dataset.rows

Пустые top_popular/top_related после этого не вызывают ретрая и не считаются подозрительными. Отражаются только в empty_views манифеста (добавлено тем же PR #25), то есть прогон завершается с exit code 0 и Собрано 1 из 1, а пустота видна лишь при чтении manifest.json.

Сужение предиката в #25 было обосновано эмпирически («возвращает ли Вордстат вообще непустой файл для этого вида»). Настоящая находка — прямое опровержение этого основания для топовых представлений: непустой файл возможен, просто мы его не дожидаемся.

Что стоит проверить при исправлении

Ретрай в стиле empty_export_retry_seconds для топовых представлений — вероятный, но непроверенный путь. Прежде чем его реализовывать, стоит выяснить, чем именно момент готовности экспорта отличается от момента появления строк в DOM: гейт уже смотрит на строки и уже проходит, значит ретрай по тому же признаку может оказаться таким же вакуумным.

Отдельно: --keep-raw на таком прогоне даёт сохранённый пустой CSV — удобный артефакт для разбора.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions