为什么HTMLParser会在非严格模式下忽略开始标记?

时间:2012-05-01 14:04:21

标签: python python-3.x html-parsing

我写了一个基于HTMLParser的简单解析器:

from html.parser import HTMLParser

class MyParser(HTMLParser):
    def __init__(self, strict = True):
        super().__init__(strict)

    def handle_starttag(self, tag, attrs):
        print('Start tag: ', tag)

    def handle_endtag(self, tag):
        print('End tag ', tag)

然后我尝试以严格和非严格模式解析下一个示例(通过在HTMLParser构造函数中传递strict = True或strict = False):

source = '''
<!DOCTYPE html>
<html>
  <head>
    <title>Hello HTML</title>
  </head>
  <body>
    <p>Hello World!</p>
  </body>
</html>
'''
#myParser = MyParser(True) # strict
myParser = MyParser(False) # non-strict
myParser.feed(source)
myParser.close()

因此,对于严格和非严格模式,我得到了两个不同的结果。 严格:

Start tag:  html
Start tag:  head
Start tag:  title
End tag  title
End tag  head
Start tag:  body
Start tag:  p
End tag  p
End tag  body
End tag  html

非严格:

End tag  title
End tag  head
End tag  p
End tag  body
End tag  html

为什么HTMLParser会在非严格模式下忽略开始标记?如何在非严格模式下使用HTMLParser而不省略开始标记?

1 个答案:

答案 0 :(得分:1)

这是python 3.2.2(和其他)中的一个错误,有关详细信息和quickfix,请参阅http://bugs.python.org/issue13273。它在3.2.3中修复。