删除python中的所有html?

时间:2010-10-19 22:35:27

标签: python tags xss lxml

有没有办法使用lxml.html删除/转义html标签而不是具有一些xss问题的beautifulsoup?我尝试使用清洁,但我想删除所有的HTML。

3 个答案:

答案 0 :(得分:11)

我相信,这段代码可以帮到你:

from lxml.html.clean import Cleaner

html_text = "<html><head><title>Hello</title><body>Text</body></html>"
cleaner = Cleaner(allow_tags=[''], remove_unknown_tags=False)
cleaned_text = cleaner.clean_html(html_text)

答案 1 :(得分:10)

在元素上尝试使用.text_content()方法,最好在使用lxml.html.clean之后删除不需要的内容(脚本标记等)。例如:

from lxml import html
from lxml.html.clean import clean_html

tree = html.parse('http://www.example.com')
tree = clean_html(tree)

text = tree.getroot().text_content()

答案 2 :(得分:0)

这使用了lxml的清洗功能,但避免了将结果包装在HTML元素中。

import lxml

doc = lxml.html.document_fromstring(str) 
cleaner = lxml.html.clean.Cleaner(allow_tags=[''], remove_unknown_tags=False)
str = cleaner.clean_html(doc).text_content() 

或作为一个班轮

lxml.html.clean.Cleaner(allow_tags=[''], remove_unknown_tags=False).clean_html(lxml.html.document_fromstring(str)).text_content()

通过将html手动解析为文档对象并将其提供给清洁器类来工作。这样clean_html也会返回一个对象而不是字符串。然后可以使用text_content()方法在没有包装元素的情况下恢复文本。