work copy
This commit is contained in:
@@ -90,7 +90,7 @@ def extract_last_name(name_str: str) -> str or None:
|
||||
|
||||
|
||||
# --- Шаг 0: Константы ---
|
||||
POSITIVE_KEYWORDS = ['зал', 'ауд', 'каб', 'корп', 'кор.']
|
||||
POSITIVE_KEYWORDS = ['зал', 'ауд', 'каб', 'корп', 'кор.', "ЛК"]
|
||||
NEGATIVE_KEYWORDS = ['доц', 'проф', 'асс', 'лек', 'пр']
|
||||
|
||||
# Транслитерация для унификации
|
||||
@@ -106,7 +106,7 @@ def is_room_number(s: str) -> bool:
|
||||
|
||||
if ',' in s:
|
||||
return False # 2. Проверка на запятые (даты)
|
||||
|
||||
|
||||
# 3. Проверка на "очевидный мусор"
|
||||
first_word = s.strip().lower().split()[0]
|
||||
if first_word in NEGATIVE_KEYWORDS:
|
||||
@@ -148,3 +148,51 @@ def is_room_number(s: str) -> bool:
|
||||
return False
|
||||
|
||||
|
||||
import requests
|
||||
from urllib.parse import urlsplit, urlunsplit, quote
|
||||
|
||||
def download_file_from_url(url, output_filename):
|
||||
"""
|
||||
Скачивает файл по URL со спецсимволами и пробелами, сохраняя его под указанным именем.
|
||||
|
||||
Args:
|
||||
url (str): Исходный URL, который может содержать пробелы и кириллицу.
|
||||
output_filename (str): Имя файла для сохранения (например, 'calc.xls').
|
||||
"""
|
||||
try:
|
||||
# --- Шаг 1: Правильное кодирование URL ---
|
||||
# Разбираем URL на части: ('https', 'www.vstu.ru', '/path/to file.xls', '', '')
|
||||
parts = urlsplit(url)
|
||||
|
||||
# Кодируем только путь, оставляя слэши '/' безопасными
|
||||
# Это превратит ' ' в '%20', 'В' в '%D0%92' и т.д.
|
||||
encoded_path = quote(parts.path, safe='/-_')
|
||||
|
||||
# Собираем URL обратно из частей с уже закодированным путем
|
||||
encoded_url = urlunsplit((parts.scheme, parts.netloc, encoded_path, parts.query, parts.fragment))
|
||||
|
||||
|
||||
# --- Шаг 2: Скачивание файла ---
|
||||
response = requests.get(encoded_url, stream=True)
|
||||
|
||||
# Проверяем, успешен ли запрос (код 200 OK)
|
||||
# Если сервер вернет ошибку (404, 500 и т.д.), здесь возникнет исключение
|
||||
response.raise_for_status()
|
||||
|
||||
# --- Шаг 3: Сохранение файла ---
|
||||
# Открываем файл для записи в бинарном режиме ('wb')
|
||||
# Использование 'with' гарантирует, что файл будет закрыт автоматически
|
||||
with open(output_filename, 'wb') as f:
|
||||
for chunk in response.iter_content(chunk_size=8192):
|
||||
f.write(chunk)
|
||||
|
||||
print(f"✅ Файл успешно скачан и сохранен как '{output_filename}'")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"❌ Ошибка скачивания: {e}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Произошла непредвиденная ошибка: {e}")
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user