从HTML标签中移除某些属性

8 投票
1 回答
5019 浏览
提问于 2025-04-17 02:35

我想知道怎么能从HTML代码中去掉一些特定的属性,比如id、style、class等等。

我原以为可以用lxml.html.clean模块来实现,但结果发现我只能用Clean(style=True).clean_html(code)来去掉style属性。我更希望不使用正则表达式来处理这个问题,因为属性可能会变化。

我想要的效果是:

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 个回答

12

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>

撰写回答