Проект аудита отелей: основные скрипты и документация
- Краулеры: smart_crawler.py, regional_crawler.py - Аудит: audit_orel_to_excel.py, audit_chukotka_to_excel.py - РКН проверка: check_rkn_registry.py, recheck_unclear_rkn.py - Отчёты: create_orel_horizontal_report.py - Обработка: process_all_hotels_embeddings.py - Документация: README.md, DB_SCHEMA_REFERENCE.md
This commit is contained in:
141
CRAWLER_FIX_REPORT.md
Normal file
141
CRAWLER_FIX_REPORT.md
Normal file
@@ -0,0 +1,141 @@
|
||||
# 🔧 ОТЧЁТ ОБ ИСПРАВЛЕНИИ КРАУЛЕРА
|
||||
|
||||
**Дата:** 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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user