51 lines
3.0 KiB
Markdown
51 lines
3.0 KiB
Markdown
# История изменений — 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.py` — `div.structItem`, `article.message`, `li.tagItem`
|
||
- `adapter.py` — подстановка параметров
|
||
|
||
- **scraper/forums/phpbb/** — адаптер для phpBB (нива-лада.рф)
|
||
- `paginate.py` — `?start=N`, `ul.pagination`
|
||
- `parse.py` — `a.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 отфильтровано).
|
||
|
||
---
|