Использование BeautifulSoup для захвата всего HTML между двумя тегами
У меня есть HTML, который выглядит так:
<h1>Title</h1>
//a random amount of p/uls or tagless text
<h1> Next Title</h1>
Я хочу скопировать весь HTML из первого h1, следующего h1. Как я могу это сделать?
Ответ 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, используя