Как я могу получить содержимое элемента body, используя html5lib в Python? - PullRequest
1 голос
/ 28 мая 2011

Как я могу получить содержимое элемента <body>, используя html5lib в Python?

Пример входных данных: <html><head></head><body>xxx<b>yyy</b></hr></body></html>

Ожидаемый результат: xxx<b>yyy</b></hr>

Должно работать, даже если HTML не работает (незакрытые теги, ...).

1 Ответ

4 голосов
/ 28 мая 2011

html5lib позволяет анализировать документы с использованием различных стандартных форматов дерева.Вы можете сделать это, используя lxml , как я сделал ниже, или вы можете следовать инструкциям в пользовательской документации , чтобы сделать это либо с minidom , ElementTree или BeautifulSoup .

file = open("mydocument.html")
doc = html5lib.parse(file, treebuilder="lxml")
content = doc.findtext("html/body", default=None):

Ответ на комментарий

Это можно сделать без установки каких-либо внешних библиотек, используя свои собственные simpletree.py , но с учетомпо комментарию в начале файла я думаю, что это не рекомендуемый способ ...

# Really crappy basic implementation of a DOM-core like thing

Если вы все же хотите это сделать, вы можете разобрать html-документ следующим образом:

f = open("mydocument.html")
doc = html5lib.parse(f) 

, а затем найдите искомый элемент, выполняя поиск дочерних узлов в документе в ширину.Узлы хранятся в массиве с именем childNodes, и каждый узел имеет имя, хранящееся в поле name.

...