2011-09-19 19 views
6

¿Cómo puedo eliminar ciertos atributos como id, style, class, etc. del código HTML?eliminar ciertos atributos de las etiquetas HTML

Pensé que podría usar el lxml.html.clean module, pero resultó que solo puedo eliminar los atributos de estilo con Clean(style=True).clean_html(code). Prefiero no usar expresiones regulares para esta tarea (los atributos podrían cambiar).

Lo que me gustaría tener:

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

Gracias de antemano!

Respuesta

10

cleaner.Cleaner.__call__ tiene un parámetro safe_attrs_only. Cuando se establece en True, solo se conservan los atributos en clean.defs.safe_attrs. Puede eliminar cualquiera o todos los atributos cambiando clean.defs.safe_attrs. Solo asegúrate de volver a cambiarlo cuando termines.

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) 

rendimientos

<tr></tr> 
+0

, gracias, eso es exactamente lo que necesito! – naeg

+0

Tengo problemas para hacer que esta técnica funcione en lxml-3.2.3. ¿Pasar para saber si cambiaron algo? – Xavi

+0

Para que funcione en v3.2.3 tuve que agregar 'cleaner.safe_attrs = clean.defs.safe_attrs' después de' cleaner = clean.Cleaner (...) '. – Xavi

Cuestiones relacionadas