вроде как откатился на ошибки парсеров без веб интерфейс

This commit is contained in:
2026-05-25 12:13:31 +03:00
parent 3ff5d42045
commit 23ecbc0f57
6 changed files with 26 additions and 108 deletions

2
app.py
View File

@@ -29,7 +29,7 @@ import contextlib
import os import os
from parsers.parser_game import run_parser_game from parsers.parser_game import run_parser_game
from parsers.parser_players import run_parser_players from parsers.parser_players import run_parser_players
from parsers.parser_schedule import run_parser_schedule from parsers.parser_schedule import run_parser_schedule, SiteUnavailableError
from parsers.parser_standings import run_parser_standings from parsers.parser_standings import run_parser_standings

View File

@@ -7,19 +7,11 @@ BASE_MATCH_URL = "https://wfl.rfs.ru/match/"
def fetch_html(url: str) -> str: def fetch_html(url: str) -> str:
headers = { headers = {"User-Agent": "Mozilla/5.0", "Accept": "*/*"}
"User-Agent": "Mozilla/5.0",
"Accept": "*/*"
}
try:
r = requests.get(url, headers=headers, timeout=20) r = requests.get(url, headers=headers, timeout=20)
r.raise_for_status() r.raise_for_status()
return r.text return r.text
except requests.exceptions.RequestException as e:
return f"Сайт недоступен: {e}"
def extract_player_id_from_href(href: str) -> str: def extract_player_id_from_href(href: str) -> str:
if not href: if not href:

View File

@@ -17,19 +17,11 @@ AMPLUA_FULL = {
def fetch_html(url: str) -> str: def fetch_html(url: str) -> str:
headers = { headers = {"User-Agent": "Mozilla/5.0", "Accept": "*/*"}
"User-Agent": "Mozilla/5.0",
"Accept": "*/*"
}
try:
r = requests.get(url, headers=headers, timeout=20) r = requests.get(url, headers=headers, timeout=20)
r.raise_for_status() r.raise_for_status()
return r.text return r.text
except requests.exceptions.RequestException as e:
return f"Сайт недоступен: {e}"
def get_links(html: str) -> list[dict]: def get_links(html: str) -> list[dict]:
soup = BeautifulSoup(html, "html.parser") soup = BeautifulSoup(html, "html.parser")

View File

@@ -50,44 +50,12 @@ def parse_russian_date(date_str: str, year: int | None = None) -> datetime:
return datetime(year, month, int(day), int(hh), int(mm), tzinfo=TZ) return datetime(year, month, int(day), int(hh), int(mm), tzinfo=TZ)
class SiteUnavailableError(Exception):
pass
def fetch_html(url: str) -> str: def fetch_html(url: str) -> str:
headers = { headers = {"User-Agent": "Mozilla/5.0", "Accept": "*/*"}
"User-Agent": "Mozilla/5.0",
"Accept": "*/*"
}
try:
response = requests.get(url, headers=headers, timeout=20) response = requests.get(url, headers=headers, timeout=20)
response.raise_for_status() response.raise_for_status()
return response.text return response.text
except requests.exceptions.Timeout:
raise SiteUnavailableError("Сайт слишком долго отвечает")
except requests.exceptions.ConnectionError:
raise SiteUnavailableError("Не удалось подключиться к сайту")
except requests.exceptions.HTTPError as e:
raise SiteUnavailableError(f"Ошибка HTTP: {e.response.status_code}")
except requests.exceptions.TooManyRedirects:
raise SiteUnavailableError("Слишком много редиректов")
except requests.exceptions.InvalidURL:
raise SiteUnavailableError("Неверный URL")
except requests.exceptions.MissingSchema:
raise SiteUnavailableError("Отсутствует схема URL, например https://")
except requests.exceptions.SSLError:
raise SiteUnavailableError("Ошибка SSL сертификата")
except requests.exceptions.RequestException as e:
raise SiteUnavailableError(f"Неизвестная ошибка запроса: {e}")
def normalize_status(score1: str | None, score2: str | None, dt: datetime) -> str: def normalize_status(score1: str | None, score2: str | None, dt: datetime) -> str:
now = datetime.now(TZ) now = datetime.now(TZ)
@@ -194,29 +162,11 @@ def parse_schedule(html: str) -> list[dict]:
return matches_data return matches_data
def run_parser_schedule() -> dict: def run_parser_schedule() -> None:
try:
html = fetch_html(URL_SCHEDULE) html = fetch_html(URL_SCHEDULE)
matches_data = parse_schedule(html) matches_data = parse_schedule(html)
sync_matches(matches_data) sync_matches(matches_data)
print(f"[parser_schedule] Matches synced: {len(matches_data)}")
return {
"success": True,
"message": f"Матчи синхронизированы: {len(matches_data)}",
"count": len(matches_data),
}
except SiteUnavailableError as e:
return {
"success": False,
"message": f"Сайт недоступен: {e}",
}
except Exception as e:
return {
"success": False,
"message": f"Ошибка парсера: {e}",
}
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -8,19 +8,11 @@ SEASON = "2025/2026"
def fetch_html(url: str) -> str: def fetch_html(url: str) -> str:
headers = { headers = {"User-Agent": "Mozilla/5.0", "Accept": "*/*"}
"User-Agent": "Mozilla/5.0",
"Accept": "*/*"
}
try:
r = requests.get(url, headers=headers, timeout=20) r = requests.get(url, headers=headers, timeout=20)
r.raise_for_status() r.raise_for_status()
return r.text return r.text
except requests.exceptions.RequestException as e:
return f"Сайт недоступен: {e}"
def parse_standings(html: str) -> list[dict]: def parse_standings(html: str) -> list[dict]:
soup = BeautifulSoup(html, "html.parser") soup = BeautifulSoup(html, "html.parser")

View File

@@ -9,18 +9,10 @@ TEAMS_URL = "https://wfl.rfs.ru/tournament/1061879/teams"
def fetch_html(url: str) -> str: def fetch_html(url: str) -> str:
headers = { headers = {"User-Agent": "Mozilla/5.0", "Accept": "*/*"}
"User-Agent": "Mozilla/5.0", response = requests.get(url, timeout=30, headers=headers)
"Accept": "*/*" response.raise_for_status()
} return response.text
try:
r = requests.get(url, headers=headers, timeout=20)
r.raise_for_status()
return r.text
except requests.exceptions.RequestException as e:
return f"Сайт недоступен: {e}"
def get_links(html) -> list: def get_links(html) -> list: