繁体   English   中英

删除HTML文件中的匹配标签?

[英]Remove matched tags in html files?

我有一些html文件,每个文件都包含

<td id="MenuTD" style="vertical-align: top;"> 
...
</td>

...可以包含任何内容,并且</td>匹配<td id="MenuTD" style="vertical-align: top;"> 我想从html文件中删除此部分。

同样,我可能还想删除文件中的其他一些标签。

如何使用Python编程?

我在看python 2.7中的HTMLParser模块,但是还没有弄清楚是否有帮助。

您可以使用BeautifulSoup完成此操作。 您有两个选择,具体取决于您要对要删除的元素执行的操作。

设定:

from bs4 import BeautifulSoup

html_doc = """
<html>
    <header>
        <title>A test</title>
    </header>
    <body>
        <table>
            <tr>
                <td id="MenuTD" style="vertical-align: top;"> 
                    Stuff here <a>with a link</a>
                    <p>Or paragraph tags</p>
                    <div>Or a DIV</div>
                </td>
                <td>Another TD element, without the MenuTD id</td>
            </tr>
        </table>
    </body>
</html>
"""

soup = BeautifulSoup(html_doc)

  • 选项1是使用extract()方法。 使用此方法,您将保留提取的元素的副本,以便以后在应用程序中使用它:

码:

menu_td = soup.find(id="MenuTD").extract()

此时,您要删除的元素已保存到menu_td变量中。 随心所欲地做。 但是, soup变量中的HTML不再包含您的元素:

print(soup.prettify())

输出:

<html>
 <header>
  <title>
   A test
  </title>
 </header>
 <body>
  <table>
   <tr>
    <td>
     Another TD element, without the MenuTD id
    </td>
   </tr>
  </table>
 </body>
</html>

MenuTD元素中的MenuTD内容均已删除。 您可以看到它仍然在menu_td变量中:

print(menu_td.prettify())

输出:

<td id="MenuTD" style="vertical-align: top;">
 Stuff here
 <a>
  with a link
 </a>
 <p>
  Or paragraph tags
 </p>
 <div>
  Or a DIV
 </div>
</td>
  • 选项2:利用.decompose() 如果不需要已删除元素的副本,则可以利用此功能从文档中删除它并销毁其内容。

码:

soup.find(id="MenuTD").decompose()

它不返回任何内容(与.extract()不同)。 但是,它确实从文档中删除了该元素:

print(soup.prettify())

输出:

<html>
 <header>
  <title>
   A test
  </title>
 </header>
 <body>
  <table>
   <tr>
    <td>
     Another TD element, without the MenuTD id
    </td>
   </tr>
  </table>
 </body>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM