красивая суповая пленка между закрытием и открытием бирки - PullRequest
0 голосов
/ 25 октября 2018

новинка в BeautifulSoup & Python.Я хочу знать, есть ли способ добавить тег после закрывающего тега и закрыть его перед открывающим тегом.Или, может быть, я должен изменить свое дерево?Как вы можете видеть, теги p рассматриваются как дочерние элементы title, но также и как родительские.

Вот мой пример кода:

<title> 
  <p> Title Name 1 </p>
</title>
<p> Paragraph 1 </p>
<p> Paragraph 2 </p>
<p> Paragraph 3 </p>
<title> 
  <p> Title Name 2 </p>
</title>

В идеале это то, чего я хотел бы ...

<title> 
  <p> Title Name 1 </p>
</title>
**<new_tag>**
<p> Paragraph 1 </p>
<p> Paragraph 2 </p>
<p> Paragraph 3 </p>
**</new_tag>**
<title> 
  <p> Title Name 2 </p>
</title>

Каждый раз, когда я пытаюсь сделать суп.find_all ('p) или soup.findChildren ('p) У меня нет нужного тега p, или я их всех беру, поэтому new_tag добавляется к каждому тегу p.Это создает вывод ниже.Есть ли способ очистить new_tag и сделать его похожим на идеальный вывод выше.

<title> 
  <new_tag>
    <p> Title Name 1 </p>
   <new_tag>
</title>
<new_tag>
<p> Paragraph 1 </p>
</new_tag>
<new_tag>
<p> Paragraph 2 </p>
</new_tag>
<new_tag>
<p> Paragraph 3 </p>
</new_tag>
<title> 
<new_tag>
  <p> Title Name 2 </p>
</new_tag>
</title>

1 Ответ

0 голосов
/ 25 октября 2018

Учитывая пример в вопросе, представляется возможным извлечь все теги и вставить 'new_tag' в соответствующее место:

p_tags = soup.find_all('p')[1:-1:]
new_tag = soup.new_tag('new_tag')
titles = soup.find_all('title')

titles[0].insert_after(new_tag)

for tag in p_tags:
    new_tag.append(tag)

new_tag.insert_after(titles[1])

результат:

>>> print(soup.prettify())
<title>
 <p>
  Title Name 1
 </p>
</title>
<new_tag>
 <p>
  Paragraph 1
 </p>
 <p>
  Paragraph 2
 </p>
 <p>
  Paragraph 3
 </p>
</new_tag>
<title>
 <p>
  Title Name 2
 </p>
</title>

появляется, чтобы соответствовать желаемому результату.

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