首页 > 解决方案 > 美丽的汤添加

在 html 末尾有类

问题描述

我有一个包含多个的 HTML 文件标签(div 内也有多个 div)。我想添加一个新的标记与类一起到 HTML 末尾的特定位置。我也尝试了appendinsertinsert_after/insert_before,但是,它没有按我的预期工作。

我的html输入是:

   <div id="page">
   <div id="records">
   <div class="record">
   <div class="header">
   <div class="title">
    Something here to display
   </div>
   </div>
   <div class="disclaimer">
   <p>Here i want to print content</p>
   </div>
   </div>
   <div class="record">
   <div class="header">
   <div class="title">
    Something here to display again once
   </div>
   </div>
   <div class="disclaimer">
   <p>Here i want to print content again once</p>
   </div>
   </div>
   <div class="record">
   <div class="header">
   <div class="title">
    Something here to display second time
   </div>
   </div>
   <div class="disclaimer">
   <p>Here i want to print content second time</p>
   </div>
   </div>
</div>
</div>

我想在末尾添加新<div>标签,class="record"在 . 的结束标签之前<div id="records">

输出如下所示:

   <div id="page">
   <div id="records">
   <div class="record">
   <div class="header">
   <div class="title">
    Something here to display
   </div>
   </div>
   <div class="disclaimer">
   <p>Here i want to print content</p>
   </div>
   </div>
   <div class="record">
   <div class="header">
   <div class="title">
    Something here to display again once
   </div>
   </div>
   <div class="disclaimer">
   <p>Here i want to print content again once</p>
   </div>
   </div>
   <div class="record">
   <div class="header">
   <div class="title">
    Something here to display second time
   </div>
   </div>
   <div class="disclaimer">
   <p>Here i want to print content second time</p>
   </div>
   </div>
   <div class="record">
   <div class="header">
   <div class="title">
    Something here to display 3rd time
   </div>
   </div>
   <div class="disclaimer">
   <p>Here i want to print content 3rd time</p>
   </div>
   </div>
</div>
</div>

就我而言,数量<div class="record">不是固定的,数量可能总是不同。

我想在 python 中使用 BeautifulSoup 获得这个问题的解决方案/建议。

标签: pythonbeautifulsoup

解决方案


您可以insert_after在最后一项之后使用soup.find_all('div', class_='record')

from bs4 import BeautifulSoup

html = '<div id="records"> <div class="record"> <div class="header"> <div class="title"> Something here to display </div> </div> <div class="disclaimer"> <p>Here i want to print content</p> </div> </div> <div class="record"> <div class="header"> <div class="title"> Something here to display again once </div> </div> <div class="disclaimer"> <p>Here i want to print content again once</p> </div> </div> <div class="record"> <div class="header"> <div class="title"> Something here to display second time </div> </div> <div class="disclaimer"> <p>Here i want to print content second time</p> </div> </div> </div>'

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

extra_html = '''
<div class="record">
    <div class="header">
        <div class="title">
            Something here to display 3rd time
        </div>
    </div>
    <div class="disclaimer">
        <p>Here i want to print content 3rd time</p>
    </div>
</div>'''

soup.find_all('div', class_='record')[-1].insert_after(BeautifulSoup(extra_html, 'html.parser')) # [-1] selects the last item

输出print(soup.prettify())

<div id="records">
 <div class="record">
  <div class="header">
   <div class="title">
    Something here to display
   </div>
  </div>
  <div class="disclaimer">
   <p>
    Here i want to print content
   </p>
  </div>
 </div>
 <div class="record">
  <div class="header">
   <div class="title">
    Something here to display again once
   </div>
  </div>
  <div class="disclaimer">
   <p>
    Here i want to print content again once
   </p>
  </div>
 </div>
 <div class="record">
  <div class="header">
   <div class="title">
    Something here to display second time
   </div>
  </div>
  <div class="disclaimer">
   <p>
    Here i want to print content second time
   </p>
  </div>
 </div>
 <div class="record">
  <div class="header">
   <div class="title">
    Something here to display 3rd time
   </div>
  </div>
  <div class="disclaimer">
   <p>
    Here i want to print content 3rd time
   </p>
  </div>
 </div>
</div>

推荐阅读