Что я пытаюсь сделать:
Удаляйте подозрительные комментарии из писем в формате html с помощью bs4. Теперь я столкнулся с проблемой с так называемым conditional comments
типа downlevel-revealed
.
import bs4
html = 'A<!--[if expression]>a<![endif]-->' \
'B<![if expression]>b<![endif]>'
soup = bs4.BeautifulSoup(html, 'html5lib')
for comment in soup.find_all(text=lambda text: isinstance(text, bs4.Comment)):
comment.extract()
Перед извлечением комментариев:
'A',
'[if expression]>a<![endif]',
'B',
'[if expression]',
'b',
'[endif]',
После извлечения комментариев:
'A',
'B',
'b',
Проблема:
Маленькая буква b также должна быть удалена. Проблема в том, что bs4 определяет первый комментарий как один объект комментария, а второй — как 3 объекта. Комментарий(если), NavigableString(b) и Комментарий(endif). Извлечение просто удаляет оба типа комментариев. NavigableString с содержимым «b» остается в DOM.
Есть ли какое-нибудь решение?