zov-tech/backend-py/app/parsers/__init__.py
wasrusgen 64edb76035 backend: new state-shape AI prompt + DNS parser MVP
AI PROMPT (ai.py):
- Документирует новую форму checklist (per_cat.answers, brand_strategy, single_brand, brands, budget_preset, pick_strategies)
- Просит вернуть 3-5 моделей по КАЖДОЙ категории (не одну)
- Новый формат ответа: by_category[cat].models[] с brand/model/price_min/price_max/search_query/pros/cons/tier
- Подробные правила для бренд-стратегий (single → вся техника одной марки; different → preferred/acceptable/avoid)
- Бюджет-пресеты с авто-распределением по категориям (fridge ~25%, hob ~12% и т.д.)

DNS PARSER (parsers/dns.py):
- search_dns(query, limit) — HTTP + BeautifulSoup
- Реалистичный User-Agent, фолбэк на JSON-LD если HTML-селекторы не сработали
- enrich_models(models) — обогащает список моделей от AI, добавляя dns: {title, price, image, url, rating, reviews}
- Вежливая задержка 0.4с между запросами

MAIN.PY:
- /api/parse_dns?q=... — тестовый эндпоинт для проверки парсера
- _handle_podbor теперь после AI вызывает _enrich_ai_with_dns для каждой модели
- _format_podbor_for_telegram переписан под новый формат by_category — выводит 3-5 моделей в каждой категории с pros/cons
- Fallback на старый формат items[] для совместимости

REQUIREMENTS:
- + beautifulsoup4 >= 4.12
- + lxml >= 5.2

DEPLOY: после пуша на VPS нужно пересобрать backend контейнер (docker compose up --build -d backend)
2026-05-11 11:42:37 +03:00

28 lines
1.6 KiB
Python
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.

"""Парсеры маркетплейсов для обогащения карточек моделей.
Подход MVP: парсим публичные HTML-страницы напрямую с VPS (без прокси).
При обнаружении anti-bot блокировок — переходим на резидентные прокси (Proxy6).
Источники:
- dns.py — DNS Shop (dns-shop.ru) — самый простой anti-bot, основной источник характеристик
- yamarket.py — Я.Маркет (market.yandex.ru) — для сравнения цен между магазинами
- wildberries.py — Wildberries (wildberries.ru) — для отзывов и рейтингов
Унифицированный формат результата:
{
"title": str, # Название как на странице
"url": str, # Ссылка на товар
"image_url": str | None, # URL основного фото
"price_min_rub": int | None, # Минимальная найденная цена
"price_max_rub": int | None, # Максимальная (если есть данные по нескольким магазинам)
"rating": float | None, # 0.0 - 5.0
"reviews_count": int | None, # Кол-во отзывов
"stores_count": int | None, # На скольких сайтах найдено (Я.Маркет)
"specs": dict[str, str], # Ключевые характеристики
"source": str, # "dns" / "yamarket" / "wildberries"
}
"""
from .dns import search_dns
__all__ = ["search_dns"]