gpt4 book ai didi

python - 如何在 Python 中使用 lxml.html.clean.Cleaner() 保留内联 CSS 样式?

转载 作者:太空狗 更新时间:2023-10-29 18:05:27 28 4
gpt4 key购买 nike

我正在尝试使用 lxml.html.clean.Cleaner() 清理 HTML 表格。我需要去除 JavaScript 属性,但想保留内联 CSS 样式。我认为 style=False 是默认设置:

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

然而当我调用cleaner.clean_html(doc)

<span style="color:#008800;">67.51</span>

会变成

<span>67.51</span>

基本上,样式不会保留。我尝试添加:

cleaner.style= False

没用。

更新:我在 Dreamhost 上使用 Python 2.6.6 + lxml 3.2.4,在本地 Macbook 上使用 Python 2.7.5 + lxml 3.2.4。相同的结果。另一件事:我的html中有一个javacript相关的属性:

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

难道lxml剥离了这个JavaScript相关的样式,对其他样式一视同仁?我希望不会。

最佳答案

如果您设置 cleaner.safe_attrs_only = False,它会起作用。

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

但比 cleaner.safe_attrs_only = False 更好的是使用 Cleaner(safe_attrs=lxml.html.defs.safe_attrs | set(['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))

输出:

<div><span style="color: #008800;">67.51</span></div>

关于python - 如何在 Python 中使用 lxml.html.clean.Cleaner() 保留内联 CSS 样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20343889/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com