Подтвердить что ты не робот

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

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

<h1>Title</h1>

//a random amount of p/uls or tagless text

<h1> Next Title</h1>

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Пример:

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

Ответ 3

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

chapter = chapter1.replace(intro, '')