Python - HTML - как изменить положение закрывающей части тега / переместить весь раздел - PullRequest
0 голосов
/ 29 ноября 2018

Я хочу изменить положение закрывающей части тега, удалив из одного места и поместив в другое.Я пытаюсь использовать BeautifulSoup, но кажется, что функции работают с целыми тегами.Я не знаю, как переместить только часть тега, например </div>, не разрушая исходную часть тега.

как изменить позицию закрывающей части тега
Пример:

html = """
    <html>
     <body>
        <div>
            <div class="A">
                <h1 id="H1">H1</h1>
            </div>
            <div>
               <div class="B">
               </div>
           </div>    < -----   remove from here

           <div class="b1"> 

               <div class="c">
               </div>
           </div>

               < -----   place here

       </div>
     </body>
    </html>  
     """

soup = BeautifulSoup(html, 'html.parser') 

Одна из моих идей - вырезать секцию

<div class="b1"> 
      <div class="c">
      </div>
 </div> 

и поставить после <div class="B"> с помощью функции insert_after, но я не знаю, как переместить весь раздел за один ход.

1 Ответ

0 голосов
/ 30 ноября 2018

Перемещая это </div> дальше вниз, вы фактически перемещаете b1 после div после A div.Таким образом, вы можете скопировать b1 div и добавить его в другой div.Затем удалите оригинал.Это можно сделать следующим образом:

from bs4 import BeautifulSoup
import copy

html = """
    <html>
     <body>
        <div>
            <div class="A">
                <h1 id="H1">H1</h1>
            </div>
            <div>
               <div class="B">
               </div>
            </div>

            <div class="b1"> 
                <div class="c">
                </div>
            </div>
       </div>
     </body>
    </html>  
     """

soup = BeautifulSoup(html, 'html.parser')

div_append = soup.find('div', class_='A').find_next('div')
div_b1 = soup.find('div', class_='b1')
div_append.append(copy.copy(div_b1))
div_b1.extract()

print(soup.prettify())

Это приведет к следующему HTML:

<html>
 <body>
  <div>
   <div class="A">
    <h1 id="H1">
     H1
    </h1>
   </div>
   <div>
    <div class="B">
    </div>
    <div class="b1">
     <div class="c">
     </div>
    </div>
   </div>
  </div>
 </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...