Загрузка данных


Ты работаешь в текущем проекте:

/home/work/skil-scrap/adt-markdownify-meta

Задача:
Реализовать только файл:

scripts/html_to_markdown.py

Важно:
- Не трогай другие файлы.
- Не меняй config_loader.py.
- Не меняй markdown_writer.py.
- Не меняй run_exporter.py.
- Сейчас нужна только логика конвертации HTML в Markdown.

Нужно реализовать:

1. Функцию clean_html(html: str) -> str

Логика:
- принимает HTML строкой;
- удаляет теги script;
- удаляет теги style;
- удаляет теги noscript;
- возвращает очищенный HTML.

2. Функцию extract_title(html: str, fallback: str = "META page") -> str

Логика:
- сначала пытается взять название из тега <title>;
- если <title> пустой или отсутствует, пытается взять первый <h1>;
- если <h1> пустой или отсутствует, возвращает fallback;
- убирает лишние пробелы.

3. Функцию normalize_blank_lines(text: str) -> str

Логика:
- убирает слишком большое количество пустых строк;
- максимум две пустые строки подряд;
- возвращает очищенный текст.

4. Функцию html_to_markdown(html: str) -> str

Логика:
- очищает HTML через clean_html;
- переводит HTML в Markdown через библиотеку html2text;
- настройки html2text:
  - ignore_links = False
  - ignore_images = True
  - body_width = 0
- применяет normalize_blank_lines;
- возвращает Markdown.

5. Функцию build_meta_markdown(html: str, url: str) -> dict

Логика:
- получает title через extract_title;
- получает markdown через html_to_markdown;
- в начало markdown добавляет блок:

## Проверка разделов META

- Иерархия АС > ФП > Модуль > Подмодуль > ТК: Не проверено
- Точки взаимодействия + API: Не проверено
- Интеграционные взаимодействия + API: Не проверено
- Стенды: Не проверено
- Технические ресурсы: Не проверено

---

- возвращает словарь:

{
  "title": title,
  "markdown": markdown
}

Требования:
- Используй BeautifulSoup из bs4.
- Используй html2text.
- Код должен быть простым и понятным.
- Не используй API.
- Не используй requests/httpx/aiohttp/urllib.
- Не добавляй токены, cookie, login, password.
- Не придумывай структуру META.
- Если данные не найдены, не придумывай их.

После реализации покажи полный код файла scripts/html_to_markdown.py.