chore(tradein/avito): ссылки на реальный issue #3047 вместо выдуманного номера
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m48s
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m48s
Воркер сослался на #3086, которого не существует — тест с таким именем остался бы загадкой для следующего читателя. Заведён настоящий issue #3047 с замерами покрытия и разбором дефекта; все ссылки и имя файла приведены к нему. Refs #3047
This commit is contained in:
parent
efce189c8b
commit
f34edeb512
2 changed files with 7 additions and 7 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
"""Тесты на реальной разметке для #3086 (5 полей detail-парсера Avito).
|
"""Тесты на реальной разметке для #3047 (5 полей detail-парсера Avito).
|
||||||
|
|
||||||
Фикстуры — две живые detail-карточки, снятые через прод-браузер 2026-08-21:
|
Фикстуры — две живые detail-карточки, снятые через прод-браузер 2026-08-21:
|
||||||
- avito_detail_card_owner_66m2.html — item_id 8322506679, продавец "Частное лицо"
|
- avito_detail_card_owner_66m2.html — item_id 8322506679, продавец "Частное лицо"
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
enrichment = await fetch_detail(item_url)
|
enrichment = await fetch_detail(item_url)
|
||||||
saved = save_detail_enrichment(db, enrichment)
|
saved = save_detail_enrichment(db, enrichment)
|
||||||
|
|
||||||
#3086 — сверка с эталонной разметкой (2 живые карточки, 2026-08-21), что реально
|
#3047 — сверка с эталонной разметкой (2 живые карточки, 2026-08-21), что реально
|
||||||
парсится и что нет:
|
парсится и что нет:
|
||||||
- sale_type: не переименование, было сломано ЧТЕНИЕ таблицы параметров — Avito отдаёт
|
- sale_type: не переименование, было сломано ЧТЕНИЕ таблицы параметров — Avito отдаёт
|
||||||
"О квартире" и "О доме" как ДВА ОТДЕЛЬНЫХ <div> с ОДНИМ И ТЕМ ЖЕ
|
"О квартире" и "О доме" как ДВА ОТДЕЛЬНЫХ <div> с ОДНИМ И ТЕМ ЖЕ
|
||||||
|
|
@ -114,7 +114,7 @@ _PUBLISH_DATE_RE = re.compile(
|
||||||
r"июля|августа|сентября|октября|ноября|декабря)\s+в",
|
r"июля|августа|сентября|октября|ноября|декабря)\s+в",
|
||||||
re.IGNORECASE,
|
re.IGNORECASE,
|
||||||
)
|
)
|
||||||
# Относительные варианты даты публикации (#3086: на эталонах 2026-08-21 marker
|
# Относительные варианты даты публикации (#3047: на эталонах 2026-08-21 marker
|
||||||
# item-view/item-date отдаёт "· сегодня в HH:MM" — раньше эта дата не читалась вовсе,
|
# item-view/item-date отдаёт "· сегодня в HH:MM" — раньше эта дата не читалась вовсе,
|
||||||
# см. _extract_meta). "вчера" не встретилась в эталонах, но это тот же УИ-паттерн —
|
# см. _extract_meta). "вчера" не встретилась в эталонах, но это тот же УИ-паттерн —
|
||||||
# добавлена по аналогии, не подтверждена живьём.
|
# добавлена по аналогии, не подтверждена живьём.
|
||||||
|
|
@ -644,7 +644,7 @@ def parse_detail_html(html: str, source_url: str) -> DetailEnrichment:
|
||||||
description = _text(tree, "[data-marker='item-view/item-description']")
|
description = _text(tree, "[data-marker='item-view/item-description']")
|
||||||
|
|
||||||
# ── Metro ────────────────────────────────────────────────────────────────
|
# ── Metro ────────────────────────────────────────────────────────────────
|
||||||
# #3086: раньше метро бралось ТОЛЬКО из текста описания (_extract_metro) — 28
|
# #3047: раньше метро бралось ТОЛЬКО из текста описания (_extract_metro) — 28
|
||||||
# строк из 54 855 avito-листингов. На эталонах 2026-08-21 метро есть в структурной
|
# строк из 54 855 avito-листингов. На эталонах 2026-08-21 метро есть в структурной
|
||||||
# разметке (div#item-view-address, по одному <span> на станцию с иконкой
|
# разметке (div#item-view-address, по одному <span> на станцию с иконкой
|
||||||
# "Пешком до метро") — читаем оттуда в первую очередь, оно покрывает и станции
|
# "Пешком до метро") — читаем оттуда в первую очередь, оно покрывает и станции
|
||||||
|
|
@ -659,7 +659,7 @@ def parse_detail_html(html: str, source_url: str) -> DetailEnrichment:
|
||||||
metro_stations = _extract_metro(description)
|
metro_stations = _extract_metro(description)
|
||||||
|
|
||||||
# ── Cadastral number ────────────────────────────────────────────────────
|
# ── Cadastral number ────────────────────────────────────────────────────
|
||||||
# #3086: НЕ извлекается — на эталонах 2026-08-21 нет ни текста "кадастров"/
|
# #3047: НЕ извлекается — на эталонах 2026-08-21 нет ни текста "кадастров"/
|
||||||
# "Кадастровый" на странице, ни заполненного значения. Единственный след поля —
|
# "Кадастровый" на странице, ни заполненного значения. Единственный след поля —
|
||||||
# пустая строка в JSON-блоке domotekaReportTeaser.cadastralNumber ("":"" — схема
|
# пустая строка в JSON-блоке domotekaReportTeaser.cadastralNumber ("":"" — схема
|
||||||
# у Avito зарезервирована, но не заполняется на наблюдаемых карточках). Не
|
# у Avito зарезервирована, но не заполняется на наблюдаемых карточках). Не
|
||||||
|
|
@ -688,7 +688,7 @@ def parse_detail_html(html: str, source_url: str) -> DetailEnrichment:
|
||||||
photo_urls.append(src)
|
photo_urls.append(src)
|
||||||
|
|
||||||
# ── Params blocks ────────────────────────────────────────────────────────
|
# ── Params blocks ────────────────────────────────────────────────────────
|
||||||
# #3086: на эталонах 2026-08-21 "О квартире" и "О доме" — ДВА ОТДЕЛЬНЫХ <div>
|
# #3047: на эталонах 2026-08-21 "О квартире" и "О доме" — ДВА ОТДЕЛЬНЫХ <div>
|
||||||
# с ОДНИМ И ТЕМ ЖЕ data-marker='item-view/item-params' (каждый со своим <ul>),
|
# с ОДНИМ И ТЕМ ЖЕ data-marker='item-view/item-params' (каждый со своим <ul>),
|
||||||
# а не один div с двумя <ul> внутри, как предполагал старый код (комментарий
|
# а не один div с двумя <ul> внутри, как предполагал старый код (комментарий
|
||||||
# "некоторые страницы совмещают всё в одном ul" ниже описывал ИМЕННО эту старую
|
# "некоторые страницы совмещают всё в одном ul" ниже описывал ИМЕННО эту старую
|
||||||
|
|
@ -1184,7 +1184,7 @@ def _extract_is_homeowner(tree: HTMLParser) -> bool | None:
|
||||||
def _extract_meta(tree: HTMLParser) -> tuple[date | None, int | None, int | None]:
|
def _extract_meta(tree: HTMLParser) -> tuple[date | None, int | None, int | None]:
|
||||||
"""Извлечь publish_date, views_total, views_today.
|
"""Извлечь publish_date, views_total, views_today.
|
||||||
|
|
||||||
publish_date (#3086): раньше искалась ТОЛЬКО внутри текста item-id-блока
|
publish_date (#3047): раньше искалась ТОЛЬКО внутри текста item-id-блока
|
||||||
([data-marker='item-view/item-id']) — на эталонах 2026-08-21 этот блок содержит
|
([data-marker='item-view/item-id']) — на эталонах 2026-08-21 этот блок содержит
|
||||||
ИСКЛЮЧИТЕЛЬНО "№ <id>", а дата лежит в СОСЕДНЕМ элементе
|
ИСКЛЮЧИТЕЛЬНО "№ <id>", а дата лежит в СОСЕДНЕМ элементе
|
||||||
[data-marker='item-view/item-date'] (" · сегодня в HH:MM"), который .text()
|
[data-marker='item-view/item-date'] (" · сегодня в HH:MM"), который .text()
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue