Как сохранить встроенный стиль CSS с помощью lxml.формат html.чистый.Cleaner() в Python?

Я пытаюсь очистить таблицу html с помощью lxml.формат html.чистый.Уборщик.)( Мне нужно удалить атрибуты javascript, но хотелось бы сохранить встроенный стиль css. Я думал, что style=False-это настройка по умолчанию:

import lxml.html.clean
cleaner = lxml.html.clean.Cleaner()

однако, когда я называю cleaner.clean_html(doc)

<span style="color:#008800;">67.51</span>

станет

<span>67.51</span>

в основном, стиль не сохраняется. Я попытался добавить:--7-->

cleaner.style= False

это не поможет.

обновление: я использую Python 2.6.6 + библиотека lxml 3.2.4 на Dreamhost и rsquo, и Python 2.7.5 + библиотека lxml 3.2.4 на местных Макбук. Те же результаты. Другое дело: в моем html есть атрибут, связанный с javacript:

<td style="cursor:pointer;">Ticker</td>

может ли это быть lxml, лишенный этого стиля javacript и обработанный другими стилями то же самое? Надеюсь, что нет.

Спасибо за любые идеи!

1 ответов


он работает, если вы установите cleaner.safe_attrs_only = False.

набор" безопасных " атрибутов (Cleaner.safe_attrs) определена в lxml.html.defs модуль (исходный код) и style не входит в набор.

но даже лучше, чем cleaner.safe_attrs_only = False использовать Cleaner(safe_attrs=lxml.html.defs.safe_attrs | set(['style'])). Это сохранит style и в то же время защитить от других небезопасных атрибутов.

демо-код:

from lxml import html
from lxml.html import clean

s ='<marquee><span style="color: #008800;">67.51</span></marquee>'
doc = html.fromstring(s)
cleaner = clean.Cleaner(safe_attrs=html.defs.safe_attrs | set(['style']))

print html.tostring(cleaner.clean_html(doc))

выход:

<div><span style="color: #008800;">67.51</span></div>