在 Python 3.2 中使用 HTMLParser

2024-05-03

我一直在使用 HTML 解析器从网站中抓取数据并剥离 html 编码。我知道各种模块,例如 Beautiful Soup,但决定走不依赖“外部”模块的道路。 Eloff 提供了一个代码:在 Python 中从字符串中去除 HTML https://stackoverflow.com/a/925630/3416774

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 解析器代码的错误。

我的第一个错误指向这一行:

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 and strict=True;研究并没有带来任何启示。


你正在子类化HTMLParser,但你没有调用它__init__方法。您需要在您的__init__ method:

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

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

from html.parser import HTMLParser

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 3.2 中使用 HTMLParser 的相关文章

随机推荐

  • 比较中单引号与双引号的意义是什么? [复制]

    这个问题在这里已经有答案了 这会返回一个错误 return arg 0 arg 1 true false 错误 ISO C 禁止指针和整数之间的比较 然而 这并不 return arg 0 arg 1 true false 有什么区别 an
  • FlatBuffers:写入和读取二进制文件?

    我对 C 和 Google 中的文件流有基本了解平面缓冲区 http google github io flatbuffers Schema文件非常简单 也是创建一个缓冲区并读取 来自缓冲区指针 我不明白的是如何将多个缓冲区保存到一个二进制
  • Firebase持久化,清除Firebase缓存

    我的应用程序使用 Firebase 来同步和恢复数据 我用setValue withCompletionBlock 插入 更新和删除 Firebase 对象的方法 每当有 CoreData 保存时就会调用此方法 从而将我的所有本地更改同步到
  • 是否可以将 contentEditable 与 jQuery DatePicker 一起使用?

    我正在寻找一种将 contentEditable 与 jQuery DatePicker 一起使用的方法 我如何在可编辑表格上使用它 我在这里找到了一个答案 http www sencha com forum showthread php
  • VBA Excel 提示用户选择默认文件夹中的文件

    我想提示用户在默认文件夹中打开 Excel 文件 我不知道如何打开默认文件夹 Sub Program1 DefaultFolder C user dump FName Application GetOpenFilename If FName
  • Assembly.GetTypes() 返回类型的顺序是什么?

    如果我获得 AppDomain 中的类型列表 这些类型是否有固有的顺序 List
  • 在 ubuntu 18.04 仿生中安装 TDA 时出错

    我尝试在 R 中安装 TDA 但出现错误 make diag o 错误 1 错误 包 TDA 编译失败 删除 usr local lib R site library TDA i p 中的错误 我尝试 sudo yum install gm
  • 使用 C# 网页浏览器单击 Javascript 按钮

    我需要让一个程序在网络浏览器中为我点击一个 javascript 按钮 这有可能吗 我想用 C 来完成这个 按钮 INPUT id str class text style TEXT ALIGN center maxLength 4 siz
  • CSS Transition - 两个方向?

    这是一个粗略的示例 可以帮助展示我想要的内容 http jsfiddle net GVaNv http jsfiddle net GVaNv 我想知道是否有办法制作叠加层transition从左侧进入 然后从右侧离开 因此 在悬停时 叠加层
  • 多个Android IntentService可以同时运行吗?

    据我了解 一个IntentService一次只能处理一个 Intent 因为它共享一个工作线程来完成所有工作 但如果我有多个IntentService在我的应用程序中 它们可以并行运行 还是都共享单个工作线程 但是如果我的应用程序中有多个
  • 在 SQL 中将 CSV 字段拆分为不同的行

    我的一位同事在做COBOL程序时遇到了这个问题 最终在应用程序层面解决了它 我仍然很好奇是否可以使用 SQL 在数据访问级别上解决它 这在某种程度上与这另一个问题 https stackoverflow com questions 2903
  • 来自 Popover 的 UIActionSheet 和 iOS8 GM

    有人在尝试从弹出窗口显示 UIActionSheet 时收到此消息吗 您的应用程序呈现了 UIAlertController 样式的 UIAlertControllerStyleActionSheet 具有此样式的 UIAlertContr
  • 关闭 MediaStyle 通知

    Lollipop 中的新 Android MediaStyle 通知没有关闭按钮 看起来 Google Code 上已经存在一个错误 在错误解决之前 有谁知道解决此问题的好方法是什么 我们应该推迟切换到 MediaStyle 吗 或者使用其
  • C# 窗口形式的漂亮图形

    我需要使用 C 在 Windows 窗体中创建一些简单的图形 简单地说 我指的是线条 圆圈等 但是 当我画画时 例如实心圆 边缘不平滑 正如使用方形像素绘制圆时所预期的那样 但是当在矢量程序中使用相同数量的像素绘制相同的圆时 它看起来很完美
  • 将 JSTL 添加到 jsp (Tomcat 8) [重复]

    这个问题在这里已经有答案了 我想在我的 jsp 中使用 JSTL 库 现在我按照教程进行操作 它告诉我将此行添加到 jsp 页面 它给我错误无法解析 taglib 与 uri 然后是 URL 我正在运行 tomcat 8 我的 web xm
  • 对不同长度的数组使用 setValues()

    我在 Google Apps 脚本中有一个二维数组 其中包含不同长度的数组 我想在电子表格中设置数组的值 但是 由于其中的数组长度不同 我收到一个错误 本质上是说范围和数组高度不对齐 我在下面列出了数组结构的示例 如果我向每个单独的数组添加
  • Swift3:如何处理优先组现在运算符应该用主体声明?

    以前的 Swift 3 运算符代码是 infix operator associativity left precedence 150 但现在 根据 Xcode 8 beta 6 这会生成以下警告 operator should not b
  • 打印堆栈指针的值

    如何在 Linux Debian 和 Ubuntu 中用 C 打印堆栈指针的当前值 我尝试谷歌但没有找到结果 一个技巧是简单地将本地地址作为指针打印出来 但它不可移植 甚至无法保证有效 void print stack pointer vo
  • Angularjs 1.2.x Injector:添加 ngRoute 后即使出现 modulerrr 错误

    我正在自学 AngularJS 但似乎无法解决这个错误 我尝试过排除故障 放弃了 这就是我得到的 索引 html div div main js var app angul
  • 在 Python 3.2 中使用 HTMLParser

    我一直在使用 HTML 解析器从网站中抓取数据并剥离 html 编码 我知道各种模块 例如 Beautiful Soup 但决定走不依赖 外部 模块的道路 Eloff 提供了一个代码 在 Python 中从字符串中去除 HTML https