python-3.x - 在 Python 3.2 中使用 HTMLParser

标签 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 ;研究并没有带来任何启示。

最佳答案

您正在继承 HTMLParser ,但你没有调用它的__init__方法。您需要在 __init__ 中添加一行方法:

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

此外,对于 Python 3,导入行是:
from html.parser import HTMLParser

通过这些更改,一个简单的示例就可以工作了。不要更改 class线,没关系。

关于python-3.x - 在 Python 3.2 中使用 HTMLParser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11061058/

相关文章:

python - 如何使用 Python 和 BS4 读取相邻 html 元素的内容?

python - 如何从 Beautiful Soup 4 解析的元素中获取名称

Python turtle 图章在 turtle 形状的图像处理后神秘消失

python - 如何让Mypy意识到在某些情况下不会使用默认值

python - 使用 Python 3.4 从 Google Patents 下载文件

php - 使用 PHP 正则表达式从 html 中提取 JSON 对象

c++ - C++ 中的 _tmain() 和 main() 有什么区别?

c# - 传递指向类属性的指针

c++ - 错误的模板参数数量(3,应该是 4)

python - 将字典附加到 Python 列表 : Strange Result?