107 lines
4.3 KiB
Markdown
107 lines
4.3 KiB
Markdown
# Парсер phpBB-форума Нива Лада Клуб
|
||
|
||
Парсер для форума [нива-лада.рф](https://нива-лада.рф/n/) (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 # этот файл
|
||
```
|
||
|
||
## Использование
|
||
|
||
```bash
|
||
# Список разделов
|
||
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`:
|
||
|
||
```json
|
||
{
|
||
"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)
|