Использование BeautifulSoup для захвата всего HTML между двумя тегами

У меня есть HTML, который выглядит так:

<h1>Title</h1>
//a random amount of p/uls or tagless text
<h1> Next Title</h1>

Я хочу скопировать весь HTML из первого h1, следующего h1. Как я могу это сделать?

3 ответа

Это четкий способ BeautifulSoup, когда второй тег h1 является родным братом первого:

html = u""
for tag in soup.find("h1").next_siblings:
 if tag.name == "h1":
 break
 else:
 html += unicode(tag)


У меня та же проблема. Не уверен, есть ли лучшее решение, но то, что я сделал, это использовать регулярные выражения для получения индексов двух узлов, которые я ищу. После этого я извлекаю HTML между двумя индексами и создаю новый объект BeautifulSoup.

Пример:

m = re.search(r'<h1>Title</h1>.*?<h1>', html, re.DOTALL)
s = m.start()
e = m.end() - len('</h1><h1><code>')
target_html = html[s:e]
new_bs = BeautifulSoup(target_html)
</code></h1>


Интересный вопрос. Вы не можете использовать только DOM, чтобы выбрать его. Вам нужно будет пройти через все элементы, предшествующие первому h1 (включая), и поместить их в intro = str (intro), а затем довести все до 2-го h1 до главы1. Затем удалите ввод из главы 1, используя

chapter = chapter1.replace(intro, '')

licensed under cc by-sa 3.0 with attribution.