从HTML标签中移除某些属性
我想知道怎么能从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>