BeautifulStoneSoup - как удалить и добавить закрывающие теги - PullRequest
1 голос
/ 24 сентября 2011

Я редактирую оригинальный пост здесь, чтобы уточнить, и, надеюсь, я свел его к чему-то более управляемому.У меня есть строка XML, которая выглядит примерно так:

<foo id="foo">
    <row>
        &lt;img alt="jules.png" src="http://localhost/jules.png" height="1024" width="764"&gt;
    </row>
    <row>
        &lt;img alt="hairfire.png" src="http://localhost/hairfire.png" height="225" width="225"&gt;
    </row>
</foo>

Итак, я делаю что-то вроде:

xml = BeautifulStoneSoup(someXml, selfClosingTags=['img'], convertEntities=BeautifulSoup.HTML_ENTITIES)

В результате это выглядит примерно так:1008 *

Обратите внимание, что в каждом теге img нет закрывающих тегов.Не уверен, что это моя проблема, но возможно.Когда я пытаюсь сделать:

images = xml.findAll('img')

, это приводит к пустому списку.Есть идеи, почему BeautifulStoneSoup не может найти мои изображения в этом фрагменте XML?

1 Ответ

1 голос
/ 03 октября 2011

Причина, по которой вы не находите теги img, заключается в том, что BeautifulSoup рассматривает их как текстовую часть тега "row".Преобразование сущностей просто изменяет строки, но не меняет основную структуру документа.Следующее не является хорошим решением (оно анализирует документ дважды), но оно сработало, когда я протестировал его на вашем примере xml.Идея состоит в том, чтобы преобразовать текст в плохой xml, а затем сделать красивый суп снова очищенным.

soup = BeautifulSoup(BeautifulSoup(text,convertEntities=BeautifulSoup.HTML_ENTITIES).prettify())
print soup.findAll('img')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...