С помощью BeautifulSoup, чтобы извлечь содержимое CDATA
Я пытаюсь использовать BeautifulSoup из bs4/Python 3 для извлечения CData. Однако всякий раз, когда я ищу его, используя следующее, он возвращает пустой результат. Может ли кто-нибудь указать, что я делаю не так?
from bs4 import BeautifulSoup,CData
txt = '''<foobar>We have
<![CDATA[some data here]]>
and more.
</foobar>'''
soup = BeautifulSoup(txt)
for cd in soup.findAll(text=True):
if isinstance(cd, CData):
print('CData contents: %r' % cd)
1 ответ:
Проблема, по-видимому, заключается в том, что синтаксический анализатор по умолчанию не анализирует CDATA должным образом. Если вы укажете правильный синтаксический анализатор, CDATA отобразится:
soup = BeautifulSoup(txt,'html.parser')
Для получения дополнительной информации о парсерах см. документы
Я добрался до этого с помощью функции diagnose , которую рекомендуют docs :
Если у вас возникли вопросы о прекрасном супе или возникли проблемы, отправьте письмо в дискуссионную группу. Если ваша проблема связана с синтаксическим анализом HTML-документа, будьте обязательно упомяните, что функция diagnose() говорит об этом документе.
С помощью функции diagnose() можно получить вывод о том, как различные синтаксические анализаторы видят ваш html, что позволяет выбрать правильный синтаксический анализатор для вашего варианта использования.