4.3 KiB
4.3 KiB
Парсер phpBB-форума Нива Лада Клуб
Парсер для форума нива-лада.рф (phpBB, subsilver2). Предназначен для создания RAG-базы знаний по ремонту Lada Niva / Chevrolet Niva / ВАЗ.
Источник
- Сайт: https://нива-лада.рф/n/
- Движок: phpBB + Board3 Portal
- Стиль: subsilver2 (табличная вёрстка)
- Разделы: ~20 технических разделов (двигатель, ходовая, электрика, кузов и т.д.)
- Доступ: ✅ открыт, без CloudFlare
Разделы форума
| ID | Название | Описание |
|---|---|---|
| 21 | Двигатель | Категория с подразделами |
| 22 | Двигатель: механика и ЭСУД | ~1849 тем, ~84K сообщений |
| 23 | Система смазки | |
| 24 | Система охлаждения | |
| 25 | Система питания | |
| 26 | Система выпуска | |
| 27 | Система зажигания | |
| 28 | Трансмиссия | |
| 29 | Коробка передач | |
| 30 | Ходовая часть | |
| 31 | Тормозная система | |
| 32 | Рулевое управление | |
| 33 | Кузов и салон | |
| 34 | Электрооборудование | |
| 35 | Отопление и кондиционирование | |
| 150 | Ремонт и ТО | Категория с подразделами |
| 104 | Флуд | |
| 114 | Ура! Купил Ниву | ~1151 страница |
| 17 | Дилеры и сервисы |
Структура пакета
lada_scraper/
├── __init__.py # package
├── __main__.py # CLI entry point
├── config.py # константы, карта разделов, URL форума
├── fetch.py # HTTP GET с ретраями
├── paginate.py # phpBB пагинация (?start=N)
├── parse.py # парсинг HTML subsilver2 (темы, посты)
├── state.py # state.json (пауза/продолжение)
├── output.py # JSONL с ротацией (100 тем/файл)
├── throttle.py # координация задержек, автоопределение бана
├── run.py # главный цикл (ThreadPoolExecutor)
└── README.md # этот файл
Использование
# Список разделов
python3 -m lada_scraper --list
# Запуск парсинга раздела
python3 -m lada_scraper 22 # Двигатель: механика и ЭСУД
python3 -m lada_scraper 150 --workers 8 # Ремонт и ТО, 8 потоков
python3 -m lada_scraper 23 --no-delay # без задержек (если не банит)
# Пауза: Ctrl+C → состояние сохраняется
# Продолжить: та же команда
Формат вывода
Данные сохраняются в lada_data/f<ID>/part_*.jsonl:
{
"section": "Система смазки",
"section_id": 23,
"topic_id": 12345,
"topic_title": "Замена масла в двигателе",
"topic_url": "https://xn----7sbbagpx1an.xn--p1ai/n/viewtopic.php?f=23&t=12345",
"total_posts": 15,
"posts": [
{
"author": "Glu777",
"date": "12 авг 2025, 20:00",
"num": "#1",
"text": "текст сообщения..."
}
],
"scraped_at": "2026-06-04T11:30:00"
}
Особенности парсинга
- Пагинация: phpBB использует
?start=Nгде N = (page-1) * items_per_page - Темы: 25 на страницу раздела
- Посты: 10 на страницу темы
- HTML: subsilver2 (табличная вёрстка) —
b.postauthor,div.postbody - Ротация: 100 тем на один JSONL-файл
Resume
state.jsonхранит какие темы обработаны- При перезапуске пропускает готовые темы
- Данные дописываются в существующие JSONL-файлы (append)