Files
LLM-UI/scraper/history/001-initial-structure.md
T

3.0 KiB
Raw Blame History

История изменений — scraper/

001 — 2026-06-06: Начальная структура

Создано

  • scraper/core/ — общий слой, независимый от движка форума

    • fetch.py — HTTP GET с ретраями, автоопределение бана
    • throttle.py — координация задержек между потоками
    • output.py — запись JSONL, ротация по N тем
    • state.py — сохранение/восстановление состояния (пауза/продолжение)
    • runner.py — ThreadPoolExecutor, единый цикл обхода через адаптер
  • scraper/forums/base.py — абстрактный базовый класс адаптера форума

    • Единый интерфейс: count_pages(), parse_topics(), parse_posts(), page_url(), topic_url()
  • scraper/forums/xenforo/ — адаптер для XenForo (vwts.ru)

    • paginate.py/page-N, div.pageNav
    • parse.pydiv.structItem, article.message, li.tagItem
    • adapter.py — подстановка параметров
  • scraper/forums/phpbb/ — адаптер для phpBB (нива-лада.рф)

    • paginate.py?start=N, ul.pagination
    • parse.pya.topictitle, div.postbody, b.postauthor
    • adapter.py — подстановка параметров
  • scraper/__main__.py — точка входа CLI

Принципы

  • core/ ничего не знает про движок форума — работает через абстракцию BaseAdapter
  • Адаптер реализует только парсинг HTML и формирование URL — никакой логики обхода
  • Каждый адаптер — отдельный пакет, можно добавить новый движок создав один пакет
  • Все решения по вёрстке документированы в комментариях перед функциями

002 — 2026-06-06: Фикс sticky-тем phpBB

Проблема: В phpBB закреплённые (sticky) темы видны на каждой странице раздела. При многопоточном парсинге (4 workers) все потоки одновременно хватают одну и ту же sticky-тему — скрипт зависает.

Решение: В parse_topics() добавлен фильтр — перед добавлением темы проверяем, есть ли в родительском <tr> иконка sticky_read.gif. Sticky-темы пропускаются (не попадают в список).

Где: lada_scraper/parse.py (на ВМ, через SSH) Проверено: sticky #331 и #477 не попадают в выдачу, обычные темы на месте. Было/стало: 28 тем → 24 темы на странице (4 sticky отфильтровано).