lada_scraper: парсер phpBB форума нива-лада.рф + доку

This commit is contained in:
2026-06-04 11:47:02 +03:00
parent 928c979509
commit eca5e3cda6
15 changed files with 1108 additions and 7 deletions
+106
View File
@@ -0,0 +1,106 @@
# Парсер 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)