✨ Major Features: - Complete RAG system for hotel website analysis - Hybrid audit with BGE-M3 embeddings + Natasha NER - Universal horizontal Excel reports with dashboards - Multi-region processing (SPb, Orel, Chukotka, Kamchatka) 📊 Completed Regions: - Орловская область: 100% (36/36) - Чукотский АО: 100% (4/4) - г. Санкт-Петербург: 93% (893/960) - Камчатский край: 87% (89/102) 🔧 Infrastructure: - PostgreSQL with pgvector extension - BGE-M3 embeddings API - Browserless for web scraping - N8N workflows for automation - S3/Nextcloud file storage 📝 Documentation: - Complete DB schemas - API documentation - Setup guides - Status reports
4.4 KiB
4.4 KiB
🔧 ОТЧЁТ ОБ ИСПРАВЛЕНИИ КРАУЛЕРА
Дата: 14 октября 2025, 14:30
Проблема: Ошибки при сохранении данных в БД
Статус: ✅ ИСПРАВЛЕНО
🐛 НАЙДЕННЫЕ ОШИБКИ:
Ошибка #1: Неверное имя колонки raw_html
column "raw_html" of relation "hotel_website_raw" does not exist
Причина: Краулер использовал raw_html, а в таблице колонка называется html
Исправление:
# ДО:
INSERT INTO hotel_website_raw (hotel_id, url, raw_html, http_status, crawled_at)
# ПОСЛЕ:
INSERT INTO hotel_website_raw (hotel_id, url, html, status_code, crawled_at)
Ошибка #2: Неверное имя колонки http_status
column "http_status" of relation "hotel_website_raw" does not exist
Причина: Краулер использовал http_status, а в таблице колонка называется status_code
Исправление: Заменено на status_code (уже исправлено в #1)
Ошибка #3: Отсутствие уникального индекса
there is no unique or exclusion constraint matching the ON CONFLICT specification
Причина: В таблице hotel_website_processed не было уникального ограничения на (hotel_id, url)
Исправление:
CREATE UNIQUE INDEX IF NOT EXISTS hotel_website_processed_hotel_id_url_idx
ON hotel_website_processed (hotel_id, url)
✅ РЕЗУЛЬТАТЫ ПОСЛЕ ИСПРАВЛЕНИЯ:
Тестирование (14:28):
- ✅ Нет ошибок в логе
- ✅ Данные сохраняются в
hotel_website_raw - ✅ Данные сохраняются в
hotel_website_processed - ✅ Краулер обрабатывает по ~140 отелей/час
Пример свежих данных:
База отдыха "Алтай-Rest" (Алтайский край) - 1 страница
База отдыха E.L.K.I. (Алтайский край) - 1 страница
Апарт-отель «Лофт Апарт» (Алтайский край) - 8 страниц
Апарт-отель «Бочкари 1825» (Алтайский край) - 7 страниц
Апарт-Парк "ШАЛЕИРИ" (Алтайский край) - 1 страница
📊 СТАТИСТИКА:
База отелей:
- 🏨 Всего отелей: 33,773
- 🌐 С сайтами: 18,594 (55.1%)
- ❌ Без сайтов: 15,179 (44.9%)
Прогресс краулинга:
- ✅ Обработано: ~930 отелей
- ⏳ Осталось: ~17,664 отелей
- 📊 Прогресс: 5.0%
- ⏱️ Ожидаемое время: ~126 часов (~5 дней)
🚀 РЕКОМЕНДАЦИИ ДЛЯ УСКОРЕНИЯ:
-
Увеличить параллелизм:
MAX_CONCURRENT = 5 # Вместо 3 -
Уменьшить количество страниц:
MAX_PAGES_PER_SITE = 10 # Вместо 15 -
Уменьшить timeout:
PAGE_TIMEOUT = 20000 # Вместо 30000 (20 секунд) -
Добавить батчинг для БД:
- Собирать данные в память
- Сохранять пачками по 50-100 страниц
📁 ИЗМЕНЁННЫЕ ФАЙЛЫ:
1. mass_crawler.py
- Строка 205:
raw_html→html - Строка 205:
http_status→status_code - Строка 207: Добавлен
ON CONSTRAINTдляhotel_website_raw - Строка 218: Добавлен уникальный индекс для
hotel_website_processed
2. База данных:
- Создан индекс:
hotel_website_processed_hotel_id_url_idx
🎯 ТЕКУЩИЙ СТАТУС:
✅ Краулер работает стабильно
✅ Ошибок нет
✅ Данные сохраняются корректно
✅ PID: 1593850
✅ Лог: mass_crawler_output.log
Автор: AI Assistant + Фёдор
Дата создания: 14 октября 2025