Использование HTMLParser в Python 3.2

Я использую HTML Parser для удаления данных с веб-сайтов и удаления html-кода при этом. Я знаю различные модули, такие как Beautiful Soup, но решил пойти по пути не в зависимости от "внешних" модулей. Существует код, предоставленный Eloff: Стриптиз HTML из строк в Python

from HTMLParser import HTMLParser

class MLStripper(HTMLParser):
    def __init__(self):
        self.reset()
        self.fed = []
    def handle_data(self, d):
        self.fed.append(d)
    def get_data(self):
        return ''.join(self.fed)

def strip_tags(html):
    s = MLStripper()
    s.feed(html)
    return s.get_data()

Он работает в Python 3.1. Тем не менее, я недавно обновился до Python 3.2.x и обнаружил, что получаю ошибки в отношении кода HTML Parser, как указано выше.

Моя первая ошибка указывает на строку:

s.feed(html)

... и ошибка говорит...

AttributeError: 'MLStripper' object has no attribute 'strict'

Итак, после небольшого исследования я добавлю "strict = True" в верхнюю строку, сделав его...

class MLStripper(HTMLParser, strict=True)

Однако я получаю новую ошибку:

TypeError: type() takes 1 or 3 arguments

Чтобы узнать, что произойдет, я удалил аргумент "self" и оставил в "strict = True"..., который отказался от ошибки:

NameError: global name 'self' is not defined

... и я получил ощущение "Я предполагаю, что угадывает".

Я не знаю, каким будет третий аргумент в строке class MLStripper(HTMLParser), после self и strict=True; исследование не пролило никакого просветления.

Ответ 1

Вы подклассифицируете HTMLParser, но вы не вызываете его метод __init__. Вам нужно добавить одну строку к вашему методу __init__:

def __init__(self):
    super().__init__()
    self.reset()
    self.fed = []

Кроме того, для Python 3 строка импорта:

from html.parser import HTMLParser

С этими изменениями работает простой пример. Не меняйте строку class, которая не связана.