BeautifulSoup4: необходимо добавить теги обратных абзацев, чтобы разделить поле на два абзаца - PullRequest
1 голос
/ 31 марта 2019

В настоящее время существует один тег заголовка, к которому прикреплено его содержимое. Мне нужно отделить заголовок от его содержимого, поддерживая их в отдельных тегах абзаца.

block_tag = <p>1.1 <u>Header Information</u>.  Content of the header with multiple lines</p>

type(block_tag)
<class 'bs4.element.Tag'>

Заголовок должен быть заключен в теги <b> или <u>

Ожидаемый результат:

block_tag
<p>1.1 <u>Header Information</u>.</p><p>  Content of the header with multiple lines</p>

До сих пор я пытался добавить теги абзаца с помощью -

new_tag ("p") создает <p></p>. Нужны обратные теги <\p><p>

Approach-1

para_tag = soup.new_tag("p")
block_tag.insert(2,para_tag)
block_tag
<p>1.1 <u>Header Information</u>. <p></p> Content of the header with multiple lines</p>

Approach-2

block_tag.insert(2,"<\p><p>")
block_tag
<p>1.1 <u>Header Information</u>&lt;\p&gt;&lt;p&gt;.  Content of the header with multiple lines</p>

Спасибо

1 Ответ

3 голосов
/ 31 марта 2019

Вы можете получить оставшееся содержимое после заголовка и wrap внутри нового тега p.Затем извлеките его из исходного тега и insert_after исходного тега.

from bs4 import BeautifulSoup
html="""
<p>1.1 <u>Header Information</u>.  Content of the header with multiple lines</p>
"""
soup=BeautifulSoup(html,'html.parser')
block_tag=soup.find('p')
remaining=block_tag.contents[-1]
new_tag=remaining.wrap(soup.new_tag("p"))
block_tag.insert_after(new_tag.extract())
print(soup)

Выходы:

<p>1.1 <u>Header Information</u></p><p>.  Content of the header with multiple lines</p>

Почти идеально, за исключением полной остановки .

Примечание. Я не совсем уверен, что такое Content of the header with multiple lines, но не воспринимайте это как точный ответ,Возможно, вам придется импровизировать на этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...