Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除python中的所有html?_Python_Tags_Xss_Lxml - Fatal编程技术网

删除python中的所有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

有没有一种方法可以使用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.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