Алгоритм:
1. На входе делаем валидацию URL
2. Делаем запрос, если статус 200, то все хорошо
3. Проверяем, есть ли поисковые настройки для сайта
4. Настройки есть
4.1 Ищем контейнеры с блоками текста и заголовков
4.2 Форматируем в словари с указанием типа строки
5. Настроек нет
5.1 Парсим элементы по дефолтному тегу из настроек
5.2 Собираем родительские контейнеры на 1 уровень
5.3 От каждого контейнера идем вверх по тегам и ищем дефолтные теги заголовков
5.4 Выбираем контейнеры с длиной текста больше числа из настроек и от которых удалось найти заголовок
5.5 Выбираем самый длинный заголовок
5.6 Собираем кортеж заголовок и текст
6. Создаем директорию из URL
7. Каждый элемент текста сохраняем и форматируем под необъодимую ширину
Улучшение:
- Сохранение настроек, если текст найден правильно
- Кластеризация текста, через растояние в дереве, чтобы найти нужный блок
ТЕСТЫ:
- https://ura.news/news/1052370155 - Нашел елементы текста и заголовка, настройки по умолчанию
- https://habr.com/ru/post/438168/ - Нашел заголовок, текст не нашел, взял комментарии, настройки по умолчанию
- https://lenta.ru/news/2019/01/31/qatar_2022/ - Нашел елементы текста и заголовка, настройки указанные в config.json
- https://www.gazeta.ru/business/2019/02/01/12157543.shtml?updated - Найден текст и подзаголовок, основной заголовок не стандартно определен, внутренние подзаголовки не нашел, настройки по умолчанию
- https://72.ru/text/gorod/65901781?from=leadingstory - нашел заголовок и текст, еще нашел лишние блоки текста, настройки по умолчанию
- https://moi-portal.ru/novosti/587527-molodezh-tyumeni-mozhet-prinyat-uchastie-v-forme-utro/ - нашел заголовок и текст, настройки по умолчанию
- https://dtf.ru/games/38639-v-tvittere-metro-exodus-igrokov-poprosili-adresovat-svoi-pretenzii-izdatelyu - найден заголовок и текст, настройки указанные в config.json