【问题标题】:Remove matched tags in html files?删除html文件中的匹配标签?
【发布时间】:2015-06-17 15:09:02
【问题描述】:

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

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

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

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

我应该如何在 Python 中编程?

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

【问题讨论】:

    标签: python python-2.7 html-parsing


    【解决方案1】:

    您可以使用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 元素中的所有内容均已删除。你可以看到它仍然在 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>
    

    【讨论】:

      猜你喜欢
      • 2011-02-04
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多