Как сохранить встроенный стиль 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>