如何使用lxml访问注释

2 投票
1 回答
2336 浏览
提问于 2025-04-16 03:43

我正在尝试从一个用lxml获取的元素列表中删除注释。

我目前能做到的最好效果是:

no_comments=[element for element in element_list if 'HtmlComment' not in str(type(each))]

我在想有没有更直接的方法?

我想根据Matthew的回答再补充一点——他让我快到了,但问题是,当从树中提取元素时,注释失去了一些身份(我不知道怎么描述),所以无法通过isinstance()方法判断它们是否是HtmlComment类的对象。

不过,当在树上遍历这些元素时,这个方法是可以用的。

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

你可以剪切出这些字符串:

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

撰写回答