Проект аудита отелей: основные скрипты и документация

- Краулеры: 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:
Фёдор
2025-10-16 10:52:09 +03:00
parent 545e199389
commit 0cf3297290
105 changed files with 28743 additions and 0 deletions

68
crawler_stats.py Normal file
View File

@@ -0,0 +1,68 @@
#!/usr/bin/env python3
import psycopg2
import os
# Подключение к БД (используем тот же пароль что в mass_crawler.py)
from urllib.parse import unquote
conn = psycopg2.connect(
host='147.45.189.234',
database='default_db',
user='gen_user',
password=unquote("2~~9_%5EkVsU%3F2%5CS")
)
cur = conn.cursor()
# Общее количество отелей
cur.execute('SELECT COUNT(*) FROM hotel_main')
total_hotels = cur.fetchone()[0]
# Отели с сайтами
cur.execute('SELECT COUNT(DISTINCT hotel_id) FROM hotel_website_raw')
hotels_with_raw = cur.fetchone()[0]
# Отели с обработанными данными
cur.execute('SELECT COUNT(DISTINCT hotel_id) FROM hotel_website_processed')
hotels_with_processed = cur.fetchone()[0]
# Общее количество страниц
cur.execute('SELECT COUNT(*) FROM hotel_website_raw')
total_raw_pages = cur.fetchone()[0]
cur.execute('SELECT COUNT(*) FROM hotel_website_processed')
total_processed_pages = cur.fetchone()[0]
# Недавно обработанные отели (за последние 24 часа)
cur.execute("""
SELECT COUNT(DISTINCT hotel_id)
FROM hotel_website_processed
WHERE processed_at > NOW() - INTERVAL '24 hours'
""")
recently_processed = cur.fetchone()[0]
print(f'📊 СТАТИСТИКА ПАРСИНГА:')
print(f' 🏨 Всего отелей: {total_hotels}')
print(f' 🌐 Отелей с raw данными: {hotels_with_raw}')
print(f' ✅ Отелей с processed данными: {hotels_with_processed}')
print(f' 📄 Всего raw страниц: {total_raw_pages:,}')
print(f' 📄 Всего processed страниц: {total_processed_pages:,}')
print(f'За последние 24ч: {recently_processed}')
print(f' 📈 Общий прогресс: {hotels_with_processed}/{total_hotels} ({hotels_with_processed/total_hotels*100:.1f}%)')
# Проверим активность краулера
cur.execute("""
SELECT hotel_id, COUNT(*) as pages_count, MAX(processed_at) as last_update
FROM hotel_website_processed
WHERE processed_at > NOW() - INTERVAL '1 hour'
GROUP BY hotel_id
ORDER BY last_update DESC
LIMIT 5
""")
recent_hotels = cur.fetchall()
if recent_hotels:
print(f'\n🔄 ПОСЛЕДНИЕ ОБРАБОТАННЫЕ ОТЕЛИ (за час):')
for hotel_id, pages_count, last_update in recent_hotels:
print(f' {hotel_id}: {pages_count} страниц в {last_update.strftime("%H:%M:%S")}')
cur.close()
conn.close()