Python-如何更改标签结尾部分的位置/移动整个部分

时间:2018-11-29 14:10:45

标签: python html beautifulsoup

我想通过从一个地方移开并放置到另一个地方来更改标签封闭部分的位置。我尝试使用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 :(得分:2)

通过将</div>进一步向下移动,实际上是在b1 div之后的div之后移动A。因此,您可以复制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>