BeautifulSoup и lxml - отличные, но здесь неуместные ответы, так как вопрос касается встроенных функций. Вот пример использования встроенного модуля minidom для анализа строки HTML. Протестировано с cPython 3.5.2:
from xml.dom.minidom import parseString
html_string = """
<!DOCTYPE html>
<html><head><title>title</title></head><body><p>test</p></body></html>
"""
# extract the text value of the document's <p> tag:
doc = parseString(html_string)
paragraph = doc.getElementsByTagName("p")[0]
content = paragraph.firstChild.data
print(content)
Однако, как указано в комментарии Джесси Хогана , это не удастся для объектов HTML, не распознаваемых mindom. Вот обновленное решение с использованием модуля Python3 html.parser:
from html.parser import HTMLParser
html_string = """
<!DOCTYPE html>
<html><head><title>title</title></head><body><p> test</p><div>not in p</div></body></html>
"""
class Parser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.in_p = []
def handle_starttag(self, tag, attrs):
if (tag == 'p'):
self.in_p.append(tag)
def handle_endtag(self, tag):
if (tag == 'p'):
self.in_p.pop()
def handle_data(self, data):
if self.in_p:
print("<p> data :", data)
parser = Parser()
parser.feed(html_string)