печать html-объектов с использованием lxml в python

Я пытаюсь создать элемент div из приведенной ниже строки с объектами html. Поскольку моя строка содержит объекты html, & зарезервированный символ в объекте html экранируется как & на выходе. Таким образом, объекты html отображаются как обычный текст. Как я могу избежать этого, чтобы объекты html отображались правильно?

s = 'Actress Adamari López And Amgen Launch Spanish-Language Chemotherapy: Myths Or Facts™ Website And Resources'

div = etree.Element("div")
div.text = s

lxml.html.tostring(div)

output:
<div>Actress Adamari L&amp;#243;pez And Amgen Launch Spanish-Language Chemotherapy: Myths Or Facts&amp;#8482; Website And Resources</div>

person ravi    schedule 07.12.2014    source источник


Ответы (1)


Вы можете указать encoding при вызове tostring():

>>> from lxml.html import fromstring, tostring
>>> s = 'Actress Adamari L&#243;pez And Amgen Launch Spanish-Language Chemotherapy: Myths Or Facts&#8482; Website And Resources'
>>> div = fromstring(s)
>>> print tostring(div, encoding='unicode')
<p>Actress Adamari López And Amgen Launch Spanish-Language Chemotherapy: Myths Or Facts™ Website And Resources</p>

В качестве примечания: вам обязательно следует использовать lxml.html.tostring(), работа с HTML данными:

Обратите внимание, что вы должны использовать lxml.html.tostring, а не lxml.tostring. lxml.tostring(doc) вернет XML-представление документа, которое не является допустимым HTML. В частности, такие вещи, как <script src="..."></script>, будут сериализованы как <script src="..." />, что полностью сбивает с толку браузеры.

Также см:

person alecxe    schedule 07.12.2014