问题描述
我正在尝试将每个<div class="c-s">
的所有子标签移到其母标签<div class="c-w">
的正前方。例如,
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')
我的预期输出是以下BeautifulSoup对象
<div class="ex_example"> aa </div>
<div class="ex_example"> aa </div>
<div class="ex_example"> cc </div>
<div class="c-w">
<div class="c-s"></div>
</div>
<div class="ex_example"> xx </div>
<div class="ex_example"> yy </div>
<div class="ex_example"> zz </div>
<div class="c-w">
<div class="c-s"></div>
</div>
这意味着<div class="ex_example"> cc </div>
的级别与<div class="c-w">
相同。
非常感谢您的帮助!
解决方法
该脚本会将所有带有class="ex_example"
的标签移动到父<div class="c-w">
的前面:
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 class="ex_example"> cc </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 class="ex_example"> zz </div>
</div>
</div>
'''
soup = BeautifulSoup(txt,'html.parser')
for c_s in soup.select('div.c-s'):
for c in list(c_s.contents):
c.find_parent('div',class_='c-w').insert_before(c)
print(soup)
打印:
<div class="ex_example"> aa </div>
<div class="ex_example"> aa </div>
<div class="ex_example"> cc </div>
<div class="c-w">
<div class="c-s"></div>
</div>
<div class="audio">link</div>
<div class="ex_example"> xx </div>
<div class="ex_example"> yy </div>
<div class="ex_example"> zz </div>
<div class="c-w">
<div class="c-s"></div>
</div>