Анализатор XML BeautifulSoup (bs4) удаляет объекты html

посмотрите на этот пример:

# xml parser
bs4.BeautifulSoup('<price>&pound;4</price>', 'xml')

# prints:
<?xml version="1.0" encoding="utf-8"?>
<price>4</price>
# html (lxml) parser
bs4.BeautifulSoup('<span>&pound;4</span>', 'lxml')

# prints:
<html><body><span>£4</span></body></html>

Обратите внимание на знак £. Почему синтаксический анализатор XML удаляет его? Что мне сделать, чтобы он был на выходе? Мне нужен xml синтаксический анализ, потому что документ содержит несколько парных тегов, которые неправильно анализируются lxml синтаксическим анализатором (например, <link>).


person uiii    schedule 13.04.2016    source источник
comment
Вы должны использовать парсер xml?   -  person Padraic Cunningham    schedule 14.04.2016


Ответы (1)


&pound; не является стандартным XML-объектом — вместо этого используйте, например, &#163;. &pound; — это объект HTML, и его нельзя использовать без объявления (или встраивания) в DTD.

Изменить: см., например, Как мне определить ссылки на объекты HTML внутри допустимого XML-документа?

person Trondster    schedule 13.04.2016
comment
Привет, спасибо за ответ. Возможно, вы правы, но BS все равно не правильно bs4.BeautifulSoup('<!DOCTYPE item [ <!ENTITY pound "&#163;"> ]><item>&pound;4</item>', 'xml') печатает <?xml version="1.0" encoding="utf-8"?><!DOCTYPE item><item>4</item> - person uiii; 14.04.2016
comment
..Могли бы вы вместо этого использовать &#163; во входных данных или каким-либо другим образом массировать входной HTML-код? - person Trondster; 15.04.2016