【问题标题】:Parsing HTML in python3, re, html.parser, or something else?在 python3、re、html.parser 或其他东西中解析 HTML?
【发布时间】:2011-02-13 03:33:15
【问题描述】:

我正在尝试获取 craigslist 州及其关联网址的列表。不用担心,我无意发送垃圾邮件,如果您想知道这是为了什么,请参阅下面的 *。

我要提取的内容从“我们州”之后的行开始,是接下来的 50 个 。我通读了 html.parser 的文档,这似乎太低级了,更多的目的是在 ide 中制作 dom 解析器或语法突出显示/格式化,而不是搜索,这让我认为我最好的选择是使用 re's。为了学习,我想让自己包含在标准库中的内容中。我不是在寻求帮助编写正则表达式,我会自己解决这个问题,只是在花时间之前确保没有更好的方法来做到这一点。

*这是我的第一个程序或任何超出简单 python 脚本的程序。我正在制作一个 c++ 程序来管理我的帖子并在它们过期时提醒我,以防我想重新发布它们,以及一个 python 脚本来下载美国所有州和城市/地区的列表以填充gui中的组合框。我真的不需要它,但我的目标是让这个“生产就绪”/功能既可以作为学习练习,又可以创建一个可能找到工作的投资组合。我不知道我是否会公开该程序,显然存在滥用的可能性,并且可能违反他们的 ToS。

【问题讨论】:

    标签: python html regex parsing


    【解决方案1】:

    Python 标准库本身提供了xml.etree 一个 XML 解析器。您不应该使用正则表达式来解析 XML。转到找到信息的特定节点并从中提取链接。

    【讨论】:

    • xml.etree 是不是比 xml.dom 更好的选择?
    • 是的。 etree 模块有一个 HTML 阅读器模块,它在处理 HTML 的怪癖方面比纯 XML 阅读器做得更好。
    • 也许我应该为此发一个新帖子,但我在使用它时遇到了麻烦。我在交互式提示中运行 parsed = xml.etree.ElementTree.parse(page) 并显示解析的输出,但它似乎没有像文档中所说的那样创建 ElementTree 实例,因为当我尝试使用解析的对象我得到一个变量未定义的错误。
    • 没关系,我想通了,但是我遇到了各种错误,格式不正确,元素无效等。还有其他选择还是我必须使用正则表达式?
    • 永远不要使用正则表达式来解析 XML。 SO中有一个FAQ。顺便说一句,在 effbot.org 中查找 ElementTree 使用示例。您会发现示例 sn-ps 对您的案例很有用。
    【解决方案2】:

    使用lxml.html。它是最好的 python html 解析器。支持xpath!

    【讨论】:

    • 这是否比 Senthil Kumaran 推荐的 xml.etree 模块更好?编辑:哦等等,这不是内置的,我试图将自己限制在内置的练习中。
    • @kryptobs2000:标准库中没有好的 html 解析器。 xml.etree.ElementTree 和朋友是 XML 解析器,而不是 html 解析器。
    • 是的,所以我来了解一下。现在试试 lxml.html,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多