html.parser странное поведение - PullRequest
2 голосов
/ 18 февраля 2012

Используя Python 3.2, я попробовал пример прямо из html.parser документации :

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Encountered a start tag:", tag)
    def handle_endtag(self, tag):
        print("Encountered an end tag :", tag)
    def handle_data(self, data):
        print("Encountered some data  :", data)

parser = MyHTMLParser(strict=False)
parser.feed('<html><head><title>Test</title></head>'
            '<body><h1>Parse me!</h1></body></html>')

Вместо получения результата, указанного в документации, я получаю:

Encountered some data  : <html>
Encountered some data  : <head>
Encountered some data  : <title>
Encountered some data  : Test
Encountered an end tag : title
Encountered an end tag : head
Encountered some data  : <body>
Encountered some data  : <h1>
Encountered some data  : Parse me!
Encountered an end tag : h1
Encountered an end tag : body
Encountered an end tag : html

По некоторым причинам некоторые теги считаются данными, НО только если strict=False. Если strict=True, я получаю правильный результат:

Encountered a start tag: html
Encountered a start tag: head
Encountered a start tag: title
Encountered some data  : Test
Encountered an end tag : title
Encountered an end tag : head
Encountered a start tag: body
Encountered a start tag: h1
Encountered some data  : Parse me!
Encountered an end tag : h1
Encountered an end tag : body
Encountered an end tag : html

1 Ответ

2 голосов
/ 18 февраля 2012

Эта ошибка была исправлена ​​(http://bugs.python.org/issue13273). на самом деле, когда вы смотрите на http://hg.python.org/cpython/log/9ce5d456138b/Lib/html/parser.py,, есть множество сообщений журнала о проблемах с Strict=False; кажется, что так должно бытьвсе еще будет считаться бетанадоело доверять Strict = False для работы в «критических приложениях» в данный момент.

...