如何使用lxml.html.clean.Cleaner()在Python中?

2024-10-17 00:20:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用lxml.html.clean.清洁剂()。我需要去除javascript属性,但希望保留内联css样式。我认为默认设置为style=False:

import lxml.html.clean
cleaner = lxml.html.clean.Cleaner()

但是,当我调用cleaner.clean_html(doc)

^{pr2}$

会变成

<span>67.51</span>

基本上,风格没有保留下来。我试图补充:

cleaner.style= False

不会有帮助的。在

更新:我在Dreamhost上使用python2.6.6+lxml3.2.4,在本地Macbook上使用python2.7.5+lxml3.2.4。同样的结果。另一件事:在我的html中有一个与javacript相关的属性:

<td style="cursor:pointer;">Ticker</td>

lxml是否会剥离这个与javacript相关的样式而对其他样式一视同仁?希望不会。在

谢谢你的任何见解!在


Tags: cleanfalse属性stylehtml样式javascriptlxml
1条回答
网友
1楼 · 发布于 2024-10-17 00:20:54

如果设置cleaner.safe_attrs_only = False,则可以使用。在

“安全”属性集(^{})在lxml.html.defs模块(source code)中定义,style不包含在该集合中。在

但比cleaner.safe_attrs_only = False更好的是使用Cleaner(safe_attrs=lxml.html.defs.safe_attrs | set(['style']))。这将保留style,同时防止其他不安全属性。在

演示代码:

from lxml import html
from lxml.html import clean

s ='<marquee><span style="color: #008800;">67.51</span></marquee>'
doc = html.fromstring(s)
cleaner = clean.Cleaner(safe_attrs=html.defs.safe_attrs | set(['style']))

print html.tostring(cleaner.clean_html(doc))

输出:

^{pr2}$

相关问题 更多 >