有没有办法使用lxml.html删除/转义html标签而不是具有一些xss问题的beautifulsoup?我尝试使用清洁,但我想删除所有的HTML。
答案 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()方法在没有包装元素的情况下恢复文本。