lada_scraper: парсер phpBB форума нива-лада.рф + доку
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user