从HTML标记中删除某些属性

时间:2011-09-19 11:38:36

标签: python html-parsing beautifulsoup lxml

如何从HTML代码中删除某些属性,如id,style,class等?

我以为我可以使用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 个答案:

答案 0 :(得分:10)

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>
相关问题