Как объединить одинаковые HTML теги?

Рейтинг: 0Ответов: 1Опубликовано: 23.08.2023

Кто нибудь, подскажите реализацию объединения одинаковых HTML тегов на Python. Есть строка:

<b>Т</b><b><i>е</i></b><b><i>с</i></b><b>т</b>

Как ее преобразовать так, чтобы ненужные и мешающие HTML теги были убраны или объединены? Не важно какие, они могут быть любыми со своими стилями там например. Результат должен получиться примерно таков:

<b>Т<i>ес</i>т</b>

Ответы

▲ 1
from bs4 import BeautifulSoup

def merge_html_tags(html_string):
    soup = BeautifulSoup(html_string, 'html.parser')
    
    # Находим все теги в HTML-строке
    tags = soup.find_all(True)
    
    # Проходимся по каждому тегу
    for tag in tags:
        # Если у тега есть следующий соседний тег и они имеют одинаковое имя
        # и оба тега содержат только текст, объединяем их
        if tag.next_sibling and tag.next_sibling.name == tag.name and tag.get_text().strip() == tag.next_sibling.get_text().strip():
            tag.string = str(tag) + str(tag.next_sibling)
            tag.next_sibling.decompose()
    
    # Возвращаем преобразованную HTML-строку
    return str(soup)

html_string = '<b>Т</b><b><i>е</i></b><b><i>с</i></b><b>т</b>'
merged_html = merge_html_tags(html_string)
print(merged_html)

Этот код использует библиотеку BeautifulSoup для парсинга и обработки HTML-строки. Он проходит по каждому тегу в HTML-строке и, если у тега есть соседний тег с таким же именем и оба тега содержат только текст (без других вложенных тегов), то эти теги объединяются в один.

Результат выполнения кода:

<b>Т<i>ес</i>т</b>