删除python中的所有html?
有没有一种方法可以使用lxml.html删除/转义html标记,而不是使用存在一些xss问题的beautifulsoup?我尝试使用cleaner,但我想删除所有html。在元素上尝试删除python中的所有html?,python,tags,xss,lxml,Python,Tags,Xss,Lxml,有没有一种方法可以使用lxml.html删除/转义html标记,而不是使用存在一些xss问题的beautifulsoup?我尝试使用cleaner,但我想删除所有html。在元素上尝试.text\u content()方法,最好是在使用lxml.html.clean以删除不需要的内容(脚本标记等)之后。例如: from lxml import html from lxml.html.clean import clean_html tree = html.parse('http://www.ex
.text\u 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()
在元素上尝试
.text\u 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()
我相信,此代码可以帮助您:
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)
来自lxml.html.clean导入清理器
html_text=“HelloText”
cleaner=cleaner(允许\u标记=[''],删除\u未知\u标记=False)
cleaned_text=cleaner.clean_html(html_text)
我相信,此代码可以帮助您:
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)
来自lxml.html.clean导入清理器
html_text=“HelloText”
cleaner=cleaner(允许\u标记=[''],删除\u未知\u标记=False)
cleaned_text=cleaner.clean_html(html_text)
这使用了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手动解析为文档对象,并将其提供给cleaner类。这样,clean_html也会返回一个对象而不是字符串。然后可以使用text_content()方法在没有包装器元素的情况下恢复文本。这使用了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手动解析为文档对象,并将其提供给cleaner类。这样,clean_html也会返回一个对象而不是字符串。然后,可以使用text_content()方法在不使用包装器元素的情况下恢复文本。beautifulsoup如何存在跨站点脚本问题?可能是指CSS。beautifulsoup如何存在跨站点脚本问题?可能是指CSS。我想摆脱一切,而不仅仅是不安全的标记如果你想摆脱一切,为什么不干脆
text=''
?;-)说真的,text\u content()
将去除所有标记,但清理也将去除css样式表规则和javascript,它们也在元素中编码为文本(但我假设您只对“真实”文本感兴趣,因此首先清理)使用的是干净的html(字符串)当我使用html.fromstring而不是html.parse时,我得到一个错误“AttributeError:'HtmlElement'对象没有属性'getroot'”@kommradHomer:这是因为parse()
返回一个elementtree,但是fromstring()
返回一个元素(因此在您的例子中不需要getroot()
)我想摆脱一切,而不仅仅是不安全的标签如果你想摆脱一切,为什么不干脆text='
?;-)说真的,text\u content()
将去除所有标记,但清理也将去除css样式表规则和javascript,它们也在元素中编码为文本(但我假设您只对“真实”文本感兴趣,因此首先清理)使用的是干净的html(字符串)当我使用html.fromstring而不是html.parse时,我得到一个错误“AttributeError:'HtmlElement'对象没有属性'getroot'”@kommradHomer:这是因为parse()
返回一个elementtree,但是fromstring()
返回一个元素(因此在您的例子中不需要getroot()
)经过一个快速的实验后,这个解决方案似乎比这个解决方案做得好得多,但我想知道更多的是如何正确地参数化Cleaner
对象(因为有很多很多选项);例如,在这种情况下,将空的allow_tags
列表和remove_unknown_tags
设置为False
在逻辑上看起来有点奇怪。@cjauvin:当然,你是对的!这是一种黑客行为。但是我确信没有人想在参数remove\u tags
中指定要删除的所有标签,如果他们想删除所有标签的话。不幸的是,在这种情况下,Cleaner
的实现鼓励用户使用allow_tags
和remove_unknown_tags
为此目的,这将结果包装成一个div。经过快速实验后,该解决方案似乎比此解决方案做得更好,例如,但是我想知道更多的是如何正确地参数化Cleaner
对象(因为有很多很多选项);例如,在这种情况下,将空的allow_tags
列表和remove_unknown_tags
设置为False
在逻辑上看起来有点奇怪。@cjauvin:当然,你是对的!这是一种黑客行为。但是我确信没有人想在参数remove\u tags
中指定要删除的所有标签,如果他们想删除所有标签的话。不幸的是,在这种情况下,Cleaner
的实现鼓励用户将allow_tags
与remove_unknown_tags
一起使用。为此,这会将结果包装为div