обновил еще капитонов
This commit is contained in:
@@ -21,12 +21,37 @@ def extract_player_id_from_href(href: str) -> str:
|
||||
|
||||
|
||||
def detect_captain(item) -> bool:
|
||||
"""Определяет капитана по текстовой метке или отдельному HTML-маркеру сайта.
|
||||
|
||||
На странице протокола капитан может быть обозначен как ``(К)`` / ``(C)``,
|
||||
а в некоторых версиях вёрстки — отдельным элементом/иконкой с captain в
|
||||
class, title, aria-label или data-атрибуте. Если сайт вообще не указал
|
||||
капитана, функция корректно возвращает False.
|
||||
"""
|
||||
if not item:
|
||||
return False
|
||||
|
||||
text = item.get_text(" ", strip=True).lower()
|
||||
text = item.get_text(" ", strip=True).lower().replace("ё", "е")
|
||||
if any(marker in text for marker in ("(к)", "(c)", "капитан", "captain")):
|
||||
return True
|
||||
|
||||
return any(x in text for x in ["(к)", "(c)"])
|
||||
# Поддержка отдельной иконки/элемента капитана, если буква не входит
|
||||
# в видимый текст строки игрока. Не привязываемся к одной версии вёрстки.
|
||||
for node in [item, *item.find_all(True)]:
|
||||
classes = " ".join(node.get("class", [])).lower()
|
||||
attrs_text = " ".join(
|
||||
str(node.get(attr) or "")
|
||||
for attr in ("title", "aria-label", "data-title", "data-role", "data-captain")
|
||||
).lower().replace("ё", "е")
|
||||
|
||||
if "captain" in classes or "капитан" in classes:
|
||||
return True
|
||||
if "captain" in attrs_text or "капитан" in attrs_text:
|
||||
return True
|
||||
if str(node.get("data-captain") or "").strip().lower() in {"1", "true", "yes"}:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def parse_starting_teams(soup: BeautifulSoup) -> tuple[list[dict], list[dict]]:
|
||||
home_starting = []
|
||||
|
||||
Reference in New Issue
Block a user