Я пытаюсь удалить комментарии из списка элементов, полученных с помощью lxml.
Лучшее, что я смог сделать, это:
no_comments=[element for element in element_list if 'HtmlComment' not in str(type(each))]
Мне интересно, есть ли более прямой путь?
Я собираюсь добавить кое-что на основе ответа Мэтью - он меня почти достал, проблема в том, что когда элемент берется из дерева, комментарии теряют некоторую идентичность (я не знаю, как это описать), так что это невозможно определить являются ли они объектами класса HtmlComment с использованием метода isinstance()
Однако этот метод можно использовать, когда элементы повторяются в дереве.
from lxml.html import HtmlComment
no_comments=[element for element in root.iter() if not isinstance(element,HtmlComment)
Для таких новичков, как я, root — это базовый элемент html, который содержит все остальные элементы дерева, и есть несколько способов получить его. Один из них - открыть файл и выполнить итерацию по нему, поэтому вместо root.iter() в приведенном выше
html.fromstring(open(r'c:\temp\testlxml.htm').read()).iter()