5 июля 2013 г.

HTML purifier на Python

Для чистки HTML-кода от тегов, сущностей и/или комментариев на Python можно использовать различные подходы. Можно использовать, например, замечательную библиотеку bleach. Но мне не хватило его гибкости и смущает производительность.

Поясню насчет гибкости. Bleach принимает список имен разрешенных тегов и список имен разрешенных атрибутов. Т.е. ситуацию, когда для одного тега разрешен один список атрибутов, а для другого тега — другой, невозможно решить простым способом. К тому же, хотелось иметь возможность разрешить любые атрибуты (не перечислять же их все).

Поэтому захотелось сделать еще один велосипед. Результатом стал скрипт, который вполне себе выполняет требуемые от него функции python-html-purifier. По крайней мере, мне так кажется. Да и время выполнения задачи у него на порядок меньше.

Модуль построен на базе HTMLParser. Класса — входящего в стандартную поставку. Т.е. не нужно тянуть за собой зависимости, что тоже иногда может быть плюсом.

Использовать класс можно так:

from purifier import HTMLPurifier

purifier = HTMLPurifier({
    'div': ['*'], # разрешает все атрибуты у тега div
    'span': ['attr-2'], # разрешает только атрибут attr-2 у тега span
    # все остальные теги удаляются, но их содержимое остается
})
print purifier.feed('<div class="e1" id="e1">Some <b>HTML</b> for <span attr-1="1" attr-2="2">purifying</span></div>')

Еще хочется отметить, что теги script и style удаляются вместе с содержимым. Это в будущем можно сделать настраиваемым.

Есть пакет на PyPi.

Комментариев нет:

Отправить комментарий