"""Точка входа для парсера Нива Лада Клуб (phpBB). Использование: python -m lada_scraper 22 # раздел "Двигатель: механика и ЭСУД" python -m lada_scraper 150 # "Ремонт и ТО" python -m lada_scraper --list # список доступных разделов python -m lada_scraper 22 --workers 8 python -m lada_scraper 22 --no-delay """ import sys, logging from .config import OUTPUT_DIR, WORKERS, SECTIONS OUTPUT_DIR.mkdir(parents=True, exist_ok=True) logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s", datefmt="%H:%M:%S", handlers=[ logging.StreamHandler(sys.stdout), logging.FileHandler(OUTPUT_DIR / "scraper.log", encoding="utf-8"), ], ) if __name__ == "__main__": args = sys.argv[1:] # ── Список разделов ─────────────────────────────────────────────── if "--list" in args: print("📋 Доступные разделы форума Нива Лада Клуб (phpBB):") print(f" {'ID':>4} {'Название':<45} {'Тем':>8}") print(f" {'─'*4} {'─'*45} {'─'*8}") # Пока что выводим из конфига for fid in sorted(SECTIONS): print(f" {fid:>4} {SECTIONS[fid]:<45}") print(f"\nПример: python -m lada_scraper 22") sys.exit(0) if not args or args[0].startswith("-"): print("❌ Укажи ID раздела. Пример:") print(" python -m lada_scraper 22") print(" python -m lada_scraper --list") print("\n⚙️ Опции:") print(" --workers N количество потоков (по умолчанию 4)") print(" --no-delay без координации задержек") print(" --no-ban-test не проверять бан") sys.exit(1) try: forum_id = int(args[0]) except ValueError: print(f"❌ ID раздела должен быть числом: {args[0]}") sys.exit(1) if forum_id not in SECTIONS: print(f"⚠️ Раздел f={forum_id} не найден в конфиге, но попробуем спарсить.") print(f" SECTIONS известные: {sorted(SECTIONS.keys())}") workers = WORKERS no_delay = False ban_test = True for a in args[1:]: if a == "--no-delay": no_delay = True elif a == "--no-ban-test": ban_test = False elif a == "--workers" or a == "-w": idx = args.index(a) if idx + 1 < len(args): try: workers = int(args[idx + 1]) except ValueError: pass from .run import run log = logging.getLogger(__name__) log.info("=" * 60) log.info(f"🚀 Нива Лада Клуб — раздел f={forum_id}") section_name = SECTIONS.get(forum_id, f"Форум #{forum_id}") log.info(f"📋 {section_name}") log.info(f"📂 {OUTPUT_DIR}/f{forum_id}/part_*.jsonl") log.info("🛑 Ctrl+C = пауза | Повторить команду = продолжить") log.info("=" * 60) try: run(forum_id, workers=workers, no_delay=no_delay, ban_test=ban_test) except KeyboardInterrupt: log.info("\n🛑 ПАУЗА. Продолжить: та же команда.") sys.exit(0)