Files
hotels/CRAWLER_FIX_REPORT.md

142 lines
4.4 KiB
Markdown
Raw Normal View History

# 🔧 ОТЧЁТ ОБ ИСПРАВЛЕНИИ КРАУЛЕРА
**Дата:** 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