从 HTML 标记中删除某些属性

Posted

技术标签:

【中文标题】从 HTML 标记中删除某些属性【英文标题】:remove certain attributes from HTML tags 【发布时间】:2011-11-20 04:25:06 【问题描述】:

如何从 html 代码中删除某些属性,例如 id、样式、类等?

我以为我可以使用lxml.html.clean module,但事实证明我只能使用Clean(style=True).clean_html(code) 删除样式属性。我不想对这个任务使用正则表达式(属性可能会改变)。

我想要什么:

from lxml.html.clean import Cleaner

code = '<tr id="ctl00_Content_AdManagementPreview_DetailView_divNova" class="Extended" style="display: none;">'

cleaner = Cleaner(style=True, id=True, class=True)
cleaned = cleaner.clean_html(code)

print cleaned
'<tr>'

提前致谢!

【问题讨论】:

【参考方案1】:

cleaner.Cleaner.__call__ 有一个safe_attrs_only 参数。当设置为True 时,仅保留clean.defs.safe_attrs 中的属性。您可以通过更改clean.defs.safe_attrs 来删除任何或所有属性。请务必在完成后将其改回。

import lxml.html.clean as clean

code = '<tr id="ctl00_Content_AdManagementPreview_DetailView_divNova" class="Extended" style="display: none;">'

safe_attrs = clean.defs.safe_attrs
cleaner = clean.Cleaner(safe_attrs_only=True, safe_attrs=frozenset())
cleansed = cleaner.clean_html(code)

print(cleansed)

产量

<tr></tr>

【讨论】:

谢谢,这正是我需要的! 我无法让这种技术在 lxml-3.2.3 中工作。碰巧知道他们是否改变了什么? 为了让它在 v3.2.3 中工作,我必须在 cleaner = clean.Cleaner(...) 之后添加 cleaner.safe_attrs = clean.defs.safe_attrs @Xavi:感谢您提供的信息。这是个好消息。事实证明,clean.Cleaner 现在(至少从 3.2.0 版开始)每个实例都有一个 safe_attrs 属性,因此不再需要旧的模块操作解决方法。更好的是,safe_attrs 可以在实例化时设置。 啊,我明白了。这是个好消息。谢谢。

以上是关于从 HTML 标记中删除某些属性的主要内容,如果未能解决你的问题,请参考以下文章

角。从 html 标记中删除属性的构建步骤

从 Python 字符串中删除不在允许列表中的 HTML 标记

删除 C# 中的某些 HTML 标记

从字符串中删除 HTML 标记(R 编程)

如何从 GMSMapView 中删除默认标记

JavaScript 从html中删除html标记