Python:如果下一个兄弟是相同的,删除包含内容的html标记

时间:2016-06-04 23:44:53

标签: python tags beautifulsoup

如果我有这样的话:

<div>
<a>Link</a>
</div>
<div>
<a>Link</a>
</div>

我想删除其中一个div标签(包括所有内容和子标签),因为两个div标签(包括其内容)是相同的。只应比较彼此相邻的标签,并最终删除其中一个标签。这也应该是recursevly。例如,如果我有这样的事情:

<div>
<a>Link</a>
<a>Link</a>
</div>
<div>
<a>Link</a>
</div>

只应移除第一个div中的一个链接。

我尝试使用以下代码解决BeautifulSoup的问题:

def removeDuplicates(items):
    for item in items:
        if item==item.nextSibling:
            item.extract()
        else:
            children = item.findChildren()
            removeDuplicates(children)

body = soup.find('body')
items = body.findChildren()
removeDuplicates(items)

但代码需要很长时间才能执行。

有没有像我描述的那样快速删除重复标签的方法?

1 个答案:

答案 0 :(得分:0)

我的代码工作缓慢,因为我假设.findChildren()只获得直接的孩子(下面的第一级),但它实际上得到了所有孩子(来自所有级别)。因此,解决方案是从我的代码中删除以下行:

    else:
        children = item.findChildren()
        removeDuplicates(children)