2011-09-19 24 views
6

Come rimuovere determinati attributi come ID, stile, classe, ecc. Dal codice HTML?rimuovere determinati attributi dai tag HTML

Ho pensato di poter utilizzare lo lxml.html.clean module, ma come è stato possibile rimuovere solo gli attributi di stile con Clean(style=True).clean_html(code). Preferirei non usare espressioni regolari per questa attività (gli attributi potrebbero cambiare).

Quello che vorrei avere:

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>' 

Grazie in anticipo!

risposta

10

cleaner.Cleaner.__call__ ha un parametro safe_attrs_only. Se impostato su True, vengono conservati solo gli attributi in clean.defs.safe_attrs. È possibile rimuovere uno o tutti gli attributi modificando clean.defs.safe_attrs. Assicurati di cambiarlo quando hai finito.

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) 

rendimenti

<tr></tr> 
+0

Grazie, questo è esattamente quello che mi serve! – naeg

+0

Ho problemi a far funzionare questa tecnica in lxml-3.2.3. Capita di sapere se hanno cambiato qualcosa? – Xavi

+0

Per farlo funzionare nella v3.2.3 ho dovuto aggiungere 'cleaner.safe_attrs = clean.defs.safe_attrs' dopo' cleaner = clean.Cleaner (...) '. – Xavi

Problemi correlati