忽略Beautifulsoup Find_All中的重复项

时间:2017-02-03 20:25:36

标签: html python-2.7 beautifulsoup

所以我试图通过只返回段落和列表标签来解析一些HTML,这很容易。以下是我到目前为止所做的一个例子:

def main():
    soup = BeautifulSoup(html, 'html.parser').find_all()
    print "output:"
    for tag in soup:
       if tag.name == 'p':
          print tag.text # Text to be used to create a RichText object
       elif tag.name == 'li':
          print tag.text # Text to be used to create a RichText object

HTML:

"<html><body><p><p>INSIDE TAG</p></p><ul><li>LIST1</li><li>LIST2</li></ul><p>OUTSIDE TAG</p></body></html> "

输出:

INSIDE TAG
INSIDE TAG
LIST1
LIST2
OUTSIDE TAG

正如你所看到的,如果一个标签包含另一个相同类型的标签,在这个例子中是一个段落,它会被重复,我想知道是否有更好的方法来避免这种情况发生?主要问题是它可能是任何可能发生这种情况的标记,因为我无法控制输入HTML。非常感谢

1 个答案:

答案 0 :(得分:1)

for tag in soup:
    if tag.name == 'p' and tag.parent.name !='p':
        print tag.text # Text to be used to create a RichText object
    elif tag.name == 'li':
        print tag.text # Text to be used to create a RichText object

您可以检查代码的父母名称以对其进行过滤