gendesign/tradein-mvp/scripts/inspect-search-html.py
lekss361 d2a0257639
All checks were successful
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-backend (push) Has been skipped
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / deploy (push) Successful in 32s
feat(tradein-scripts): scrapers + probes + Phase C improvements (#551)
2026-05-24 19:58:38 +00:00

55 lines
2.2 KiB
Python

"""Fetch Avito search page и анализ URL slugs для room-filter."""
import re
import sys
import types
from pathlib import Path
_BACKEND = Path(__file__).resolve().parent.parent / "backend"
if str(_BACKEND) not in sys.path:
sys.path.insert(0, str(_BACKEND))
for _m in ("weasyprint", "weasyprint.text", "weasyprint.text.ffi", "weasyprint.css", "weasyprint.css.targets"):
sys.modules[_m] = types.ModuleType(_m)
sys.modules["weasyprint"].HTML = type("HTML", (), {"__init__": lambda self, *a, **kw: None})
sys.modules["weasyprint"].CSS = type("CSS", (), {"__init__": lambda self, *a, **kw: None})
import asyncio # noqa: E402
from curl_cffi.requests import AsyncSession # noqa: E402
async def main() -> None:
url = "https://www.avito.ru/ekaterinburg/kvartiry/prodam-ASgBAgICAUSSA8YQ?s=104&p=1"
async with AsyncSession(
impersonate="chrome120",
headers={
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "ru-RU,ru;q=0.9",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
},
) as s:
r = await s.get(url)
print(f"status={r.status_code} size={len(r.content)}")
text = r.text
with Path("/tmp/avito-search-sample.html").open("wb") as f:
f.write(r.content)
print("saved → /tmp/avito-search-sample.html")
# Find filter links — pattern /ekaterinburg/kvartiry/prodam/<slug>-ASg...
links = re.findall(r'href="(/ekaterinburg/kvartiry/prodam/[^"]+)"', text)
unique = sorted(set(links))
print(f"\nUnique filter links ({len(unique)} found):")
for link in unique[:30]:
# Decode shortened
if "komnatn" in link.lower() or "studii" in link.lower() or "svobodnaya" in link.lower():
print(f" ROOMS: {link}")
else:
print(f" other: {link[:120]}")
# Also check direct headings
room_headings = re.findall(r'>(Студии?|[0-9]-[Кк]омнатн\w+|Свободная планировка)<', text)
print(f"\nRoom headings in HTML: {sorted(set(room_headings))}")
if __name__ == "__main__":
asyncio.run(main())