Здравствуйте.
Я анализирую контент страницы спарсенной с помощью Python 3 и Beautiful Soup. Проблема в том, что на странице могут быть дубли HTML тэгов которые расположены в разных ветках DOM (заранее мне их положение не известно). Дубли тэгов нужно удалить (но оригинал тэга оставить), чтобы потом из HTML извлечь текст внутри тэгов. Например вот такое может быть внутри объекта soup:
<div class="act_first">
<div class="stats">
<div class="key">COLOR</div>
<div class="value">Brown</div>
</div>
</div>
<div id="stats" class="not_visible">
<div class="stats">
<div class="key">COLOR</div>
<div class="value">Brown</div>
</div>
</div>
Нужно удалить это:
<div class="stats">
<div class="key">COLOR</div>
<div class="value">Brown</div>
</div>
Чтобы осталось это:
<div class="act_first">
<div class="stats">
<div class="key">COLOR</div>
<div class="value">Brown</div>
</div>
</div>
<div id="stats" class="not_visible">
</div>
Я накидал код с подробными комментариями:
# Получаем список всех тэгов со страницы
all_tags = soup.find_all()
# Список из тэгов после чистки
all_tags_list = []
# Конвертируем список тэгов в список
for tag in all_tags:
all_tags_list.append(str(tag))
print('Всего тэгов на странице', len(all_tags_list))
tags_before_clear = all_tags_list
# Удаляем дубли тэгов, сравнивая каждый с каждым
for tag in all_tags_list:
for tag_1 in all_tags_list:
# Если тэги совпадают, удаляем второй тэг
if tag == tag_1:
tags_before_clear.remove(tag)
print('Тэгов после чистки', len(tags_before_clear))
# Склеиваем список в строку
tags_before_clear_str = ' '.join(tags_before_clear)
# Снова создаем объект SOUP
soup = BeautifulSoup(tags_before_clear_str, 'html5lib')
# Извлекаем только текст из тэгов и переводим в нижний регистр
soup_text = soup.text.lower()
Мне не хватает понимания каким должен быть цикл, чтобы в итоге у меня остался список с уникальными тегами порядок которых не нарушен.