<h2>Заголовок раздела</h2>
<p>Какой-то контент</p>
<p>Какой-то контент</p>
<p>Какой-то контент</p>
<p>Какой-то контент</p>
<p>Какой-то контент</p>
<h2>Другой заголовок раздела</h2>
<p>Опять какой-то контент</p>
<p>Опять какой-то контент</p>
<p>Опять какой-то контент</p>
<p>Опять какой-то контент</p>
<p>Опять какой-то контент</p>
sections = []
current_section = None
paragraphs = []
for tag in tags: # перебираем теги, которые надо обработать
if tag.name == 'h2':
if current_section is not None:
sections.append( (current_section, paragraphs) )
current_section = tag
paragraphs = []
elif tag.name == 'p':
paragraphs.append(tag)
if current_section is not None:
sections.append( (current_section, paragraphs) )
from bs4 import BeautifulSoup
OLD_DOC = '''
<html>
<body>
<h2>Заголовок раздела</h2>
<p>Какой-то контент 1</p>
<p>Какой-то контент 2</p>
<p>Какой-то контент 3</p>
<p>Какой-то контент 4</p>
<p>Какой-то контент 5</p>
<h2>Другой заголовок раздела</h2>
<p>Опять какой-то контент 1</p>
<p>Опять какой-то контент 2</p>
<p>Опять какой-то контент 3</p>
<p>Опять какой-то контент 4</p>
<p>Опять какой-то контент 5</p>
<h2>Ещё один заголовок раздела</h2>
<p>Ещё один какой-то контент 1</p>
<p>Ещё один какой-то контент 2</p>
<p>Ещё один какой-то контент 3</p>
<p>Ещё один какой-то контент 4</p>
<p>Ещё один какой-то контент 5</p>
</body>
</html>
'''
NEW_DOC = ''
part_start = OLD_DOC.rfind("<h2>")
while part_start != -1:
part_stop = OLD_DOC.find('</body>')
part = OLD_DOC[part_start:part_stop].strip()
NEW_DOC = f'<div>\n{part}\n</div>\n{NEW_DOC}'
OLD_DOC = OLD_DOC.replace(part,"")
part_start = OLD_DOC.rfind("<h2>")
soup = BeautifulSoup(NEW_DOC, 'lxml')
data = soup.find_all('div')
# далее по вкусу