【问题标题】:BeautifulSoup: How to remove empty tables, while preserving tables that are partially empty or not emptyBeautifulSoup:如何删除空表,同时保留部分为空或不为空的表
【发布时间】:2012-02-23 16:24:03
【问题描述】:

我有一个最初在 MS Frontpage 中创建的旧网站,我正在尝试 defrontpagify。我编写了一个 BeautifulSoup 脚本来完成大部分工作。剩下的就是删除空表,例如在其td 标记的any 中没有文本内容或数据的表。

我遇到的问题是,如果至少有一个td 标记不包含数据,即使其他标记不包含数据,我到目前为止所尝试的操作也会删除该表。这会删除整个文档中的所有表格,包括我想要保留的数据。

tags = soup.findAll('table',text=None,recursive=True) 
[tag.extract() for tag in tags]

关于如何只删除 none 的 td 标签包含任何数据的表有什么建议吗? (我不在乎它们是否包含img 或空锚标记,只要没有文本即可)。

【问题讨论】:

    标签: python parsing html-parsing beautifulsoup


    【解决方案1】:

    使用.text 属性。它检索该元素中的所有文本内容(递归)。

    例子:

    from BeautifulSoup import BeautifulSoup as BS
    
    html = """
    <table id="empty">
      <tr><td></td></tr>
    </table>
    
    <table id="with_text">
      <tr><td>hey!</td></tr>
    </table>
    
    <table id="with_text_in_one_row">
      <tr><td></td></tr>
      <tr><td>hey!</td></tr>
    </table>
    
    <table id="no_text_but_img">
      <tr><td><img></td></tr>
    </table>
    
    <table id="no_text_but_a">
      <tr><td><a></a></td></tr>
    </table>
    
    <table id="text_in_a">
      <tr><td><a>hey!</a></td></tr>
    </table>
    
    """
    
    soup = BS(html)
    for table in soup.findAll("table" ,text=None,recursive=True):
        if table.text:
            print table["id"]
    

    输出:

    with_text
    with_text_in_one_row
    text_in_a
    

    【讨论】:

    • @ByronGibson:你能从你的文件中展示一个在此之后留下的空表示例吗?
    • 嘿,抱歉,我看错了 html,毕竟它不是空的。我一意识到就删除了我的评论,但我猜我的速度不够快。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多