удалить определенные атрибуты из тегов HTML - PullRequest
6 голосов
/ 19 сентября 2011

Как удалить определенные атрибуты, такие как идентификатор, стиль, класс и т. Д., Из кода HTML?

Я думал, что смогу использовать модуль lxml.html.clean , но, как оказалось, я могу удалить только атрибуты стиля с 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>'

Заранее спасибо!

1 Ответ

10 голосов
/ 19 сентября 2011

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