如何在Python中移除所有HTML?

1 投票
3 回答
7334 浏览
提问于 2025-04-16 05:46

有没有办法用lxml.html来去掉或处理HTML标签,而不是用beautifulsoup,因为后者有一些XSS安全问题?我试过用cleaner,但我想要去掉所有的HTML。

3 个回答

1

这个方法使用了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()方法提取文本,而不需要额外的包装元素。

12

我觉得这段代码可以帮到你:

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)
12

试试在一个元素上使用 .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()

撰写回答