Files
hotels/CRAWLER_FIX_REPORT.md
Фёдор 684fada337 🚀 Full project sync: Hotels RAG & Audit System
 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
2025-10-27 22:49:42 +03:00

143 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔧 ОТЧЁТ ОБ ИСПРАВЛЕНИИ КРАУЛЕРА
**Дата:** 14 октября 2025, 14:30
**Проблема:** Ошибки при сохранении данных в БД
**Статус:****ИСПРАВЛЕНО**
---
## 🐛 **НАЙДЕННЫЕ ОШИБКИ:**
### **Ошибка #1: Неверное имя колонки `raw_html`**
```
column "raw_html" of relation "hotel_website_raw" does not exist
```
**Причина:** Краулер использовал `raw_html`, а в таблице колонка называется `html`
**Исправление:**
```python
# ДО:
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)`
**Исправление:**
```sql
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 дней)
---
## 🚀 **РЕКОМЕНДАЦИИ ДЛЯ УСКОРЕНИЯ:**
1. **Увеличить параллелизм:**
```python
MAX_CONCURRENT = 5 # Вместо 3
```
2. **Уменьшить количество страниц:**
```python
MAX_PAGES_PER_SITE = 10 # Вместо 15
```
3. **Уменьшить timeout:**
```python
PAGE_TIMEOUT = 20000 # Вместо 30000 (20 секунд)
```
4. **Добавить батчинг для БД:**
- Собирать данные в память
- Сохранять пачками по 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