在Python 3.2中使用HTMLParser

时间:2012-06-16 05:21:48

标签: python-3.x html-parsing arguments web-scraping stripping

我一直在使用HTML Parser从网站上删除数据并在执行此操作时删除html编码。我知道各种各样的模块,比如Beautiful Soup,但我决定不依赖于“外部”模块。 Eloff提供了一个代码:Strip HTML from strings in 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 个答案:

答案 0 :(得分:28)

您是HTMLParser的子类,但您没有调用其__init__方法。您需要在__init__方法中添加一行:

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

此外,对于Python 3,导入行是:

from html.parser import HTMLParser

通过这些更改,一个简单的示例可行。请勿更改与class不相关的行。