下面的代码检查是否有多个打开的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标签?
答案 0 :(得分:1)
我不会使用BeautifulSoup
,因为它特别是标签汤解析器。它为您清理了不匹配的打开和关闭标签,这是重点。
相反,请使用BeautifulSoup使用的解析器。 Python中有一个标准的,在Python2中称为HTMLParser
,在Python3中称为html.parser
。如果您已阅读BeautifulSoup文档,则表示其他人可以使用,例如lxml
或html5lib
。
例如:
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