万一出现1个以上的子标签,如何在子标签后向右移动子标签? [英] How to move sub-tags to right after a mother tag in case there are more than 1 occurrence?

查看:79
本文介绍了万一出现1个以上的子标签,如何在子标签后向右移动子标签?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将每个<div class="c-s">的所有子标签移到其母标签<div class="c-w">之前.例如,

I'm trying to move all sub-tags of each <div class="c-s"> to right before the its mother tag <div class="c-w">. For example,

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对象

My expected output is the following BeautifulSoup object

<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">相同.

This means the level of such <div class="ex_example"> cc </div> is the same as <div class="c-w">.

非常感谢您的帮助!

推荐答案

此脚本会将带有class="ex_example"的所有标签移到父<div class="c-w">前面:

This script will move all tags with class="ex_example" in front of 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>

这篇关于万一出现1个以上的子标签,如何在子标签后向右移动子标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆