2014-12-07 2 views
4

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

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> 

ответ

3

Вы можете указать 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> 

В качестве примечания, вы should definitely use lxml.html.tostring() при работе с HTML данных:

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

Также смотрите: