首页 > 解决方案 > 如何将子标签移动到母标签之后?

问题描述

我有一个html,里面有很多元素,<div class="ex_example"> .. </div>里面<div class="c-s">又是<div class="c-w",即

<div class="c-w"
  <div class="c-s">
     <div class="ex_example"> .. </div>
     <div class="ex_example"> .. </div>
     <div class="ex_example"> .. </div>
</div></div>

您能否详细说明如何将所有内容<div class="ex_example"> .. </div>移至右侧<div class="c-w"。我是说

<div class="ex_example"> .. </div>
<div class="ex_example"> .. </div>
<div class="ex_example"> .. </div>
<div class="c-w"
  <div class="c-s">
</div></div>

我的代码是

import requests
session = requests.Session()
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0'}
r = session.get('https://dictionnaire.lerobert.com/definition/aimer', headers = headers)
soup = BeautifulSoup(r.content, 'html.parser')

非常感谢你的帮助!


更新:我遇到的情况不止一个<div class="c-w",其中一些可能不包含<div class="c-s">.

from bs4 import BeautifulSoup

txt = '''
<div class="c-w">
  <div class="c-s">
    <div class="ex_example"> aa </div>
    <div class="ex_example"> aa </div>
  </div>
</div>

<div class="audio">link</div>

<div class="c-w">
  <div class="c-s">
    <div class="ex_example"> xx </div>
    <div class="ex_example"> yy </div>
  </div>
</div>
'''

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

标签: python-3.xbeautifulsoup

解决方案


我希望我能很好地理解你的问题:你可以.insert_before()在一些标签/字符串之前插入标签/字符串:

from bs4 import BeautifulSoup

txt = '''
<div class="c-w">
  <div class="c-s">
     <div class="ex_example"> 1.. </div>
     <div class="ex_example"> 2.. </div>
     <div class="ex_example"> 3.. </div>
</div></div>
'''

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

for c in list(soup.select_one('div.c-s').contents):
    soup.select_one('div.c-w').insert_before(c)

print(soup)

印刷:

<div class="ex_example"> 1.. </div>
<div class="ex_example"> 2.. </div>
<div class="ex_example"> 3.. </div>
<div class="c-w">
<div class="c-s"></div></div>

推荐阅读