如何使用BeautifulSoup检查已关闭标签的总数?

时间:2014-03-01 16:47:15

标签: python beautifulsoup

下面的代码检查是否有多个打开的html标记,

from bs4 import BeautifulSoup


invalid = """<html>
<html>

</html>
</html>"""

soup = BeautifulSoup(invalid, 'html.parser')
print len(soup.find_all("html"))  # prints 2

valid = """<html>
</html></html>"""

soup = BeautifulSoup(valid, 'html.parser')
print len(soup.find_all("html"))  # prints 1

但是如何检查是否有多个已关闭的html标签?

1 个答案:

答案 0 :(得分:1)

我不会使用BeautifulSoup,因为它特别是标签汤解析器。它为您清理了不匹配的打开和关闭标签,这是重点。

相反,请使用BeautifulSoup使用的解析器。 Python中有一个标准的,在Python2中称为HTMLParser,在Python3中称为html.parser。如果您已阅读BeautifulSoup文档,则表示其他人可以使用,例如lxmlhtml5lib

例如:

import html.parser

class Parser(html.parser.HTMLParser):
    count = 0
    def handle_endtag(self, tag):
        if tag == 'html':
            self.count += 1

parser = Parser()
parser.feed('<html></html><!-- </html> --></html>')
parser.close()
print(parser.count)

输出:

2