2011-09-19 25 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

関連する問題