mirror of
https://github.com/wasrusgen/zov-tech.git
synced 2026-06-03 15:44:47 +00:00
parsers: skip sponsored/ad URLs (cpc/sponsored=1) — they expire in 2-3 hours
User reported clicking matrix prices led to 'Произошла ошибка!' on OZON home page. Cause: parsers captured /product/?sponsored=1&cpc=Jtiito95... links that died after few hours. Fix: - ozon.py: skip href with 'sponsored=1', '/promo/', 'cpc='. Strip query string from final URL. - yamarket.py: skip 'sponsored=1', 'cpc=', 'advUuid' (Я.Маркет sponsored marker) - citilink.py: strip query string from final URL (defensive) Now matrix links go to canonical product pages that don't expire.
This commit is contained in:
parent
ef500fa446
commit
c97b8dce3c
@ -62,7 +62,9 @@ def _parse_html(html: str, limit: int) -> list[dict[str, Any]]:
|
||||
continue
|
||||
seen_urls.add(product_id)
|
||||
|
||||
full_url = href if href.startswith("http") else f"{_BASE_URL}{href}"
|
||||
# Финальный URL — БЕЗ query params (sponsored / cpc / tracking)
|
||||
href_clean = href.split("?")[0]
|
||||
full_url = href_clean if href_clean.startswith("http") else f"{_BASE_URL}{href_clean}"
|
||||
|
||||
# Поднимаемся к родительской карточке — у Citilink CSS-in-JS, поэтому
|
||||
# ищем ближайший div, в котором есть и цена и название
|
||||
|
||||
@ -64,13 +64,17 @@ def _parse_html(html: str, limit: int) -> list[dict[str, Any]]:
|
||||
break
|
||||
|
||||
href = link.get("href") or ""
|
||||
# Нормализация URL — убираем query params для дедупа
|
||||
# Пропускаем спонсорные ссылки — они истекают через 2-3 часа
|
||||
if "sponsored=1" in href or "/promo/" in href or "cpc=" in href:
|
||||
continue
|
||||
# Чистим URL — убираем все query-параметры
|
||||
url_clean = href.split("?")[0]
|
||||
if url_clean in seen_urls:
|
||||
continue
|
||||
seen_urls.add(url_clean)
|
||||
|
||||
full_url = href if href.startswith("http") else f"{_BASE_URL}{href}"
|
||||
# Финальный URL — БЕЗ query params (sponsored ссылки иначе через 2-3ч 404)
|
||||
full_url = url_clean if url_clean.startswith("http") else f"{_BASE_URL}{url_clean}"
|
||||
|
||||
# Поднимаемся до карточки — у OZON это обычно ближайший div с tile-* классом
|
||||
card = (
|
||||
|
||||
@ -67,6 +67,9 @@ def _parse_html(html: str, limit: int) -> list[dict[str, Any]]:
|
||||
if len(results) >= limit:
|
||||
break
|
||||
href = link.get("href") or ""
|
||||
# Пропускаем sponsored — их URL'ы с CPC-токенами истекают через несколько часов
|
||||
if "sponsored=1" in href or "cpc=" in href or "advUuid" in href:
|
||||
continue
|
||||
m_id = re.search(r"/card/[^/]+/(\d+)", href)
|
||||
if not m_id:
|
||||
continue
|
||||
|
||||
Loading…
Reference in New Issue
Block a user