2011-09-19 71 views
6

如何從HTML代碼中刪除某些屬性,如id,樣式,類等?從HTML標記中刪除某些屬性

我想我可以使用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>' 

謝謝!

回答

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> 
+0

謝謝,這正是我所需要的! – naeg

+0

我在使用lxml-3.2.3的這種技術時遇到了困難。知道他們是否改變了一些東西? – Xavi

+0

爲了在v3.2.3中工作,我必須在'cleaner = clean.Cleaner(...)'之後添加'cleaner.safe_attrs = clean.defs.safe_attrs'。 – Xavi