Как получить доступ к комментариям с помощью lxml - PullRequest
2 голосов
/ 05 сентября 2010

Я пытаюсь удалить комментарии из списка элементов, которые были получены с помощью 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()

1 Ответ

1 голос
/ 05 сентября 2010

Вы можете вырезать строки:

from lxml.html import HtmlComment # or similar
no_comments=[element for element in element_list if not isinstance(element, HtmlComment)]
...