python-3.x - 如果出现超过 1 次,如何将子标签移动到母标签之后?
问题描述
我正在尝试将每个子标签的所有子标签移到<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"
在 parent 前面移动所有标签<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>
推荐阅读
- javascript - Javascript无法在浏览器firefox android上运行
- jquery - 所有具有相同类的视频在悬停时自动播放,而不是只有一个使用 jQuery
- python - Python 2/Python 3: pip freeze vs help("modules")
- ios - 如何在 Swift 中修复返回 nil 的值?
- java - 从 MainActivity 切换或删除启动画面
- php - 如何使用codeigniter将选中和未选中复选框的值更新为表
- c# - 如何使用 RegionInfo 获取泰国的货币符号
- ajax - 传递多维数组ajax laravel?
- c - Function which gets two equal size integer arrays and number of elements as parameters and displays sum of parallel elements of both arrays in C
- typescript - Why TypeScript do not emit a error when use as type?