28

在 .Net 中,我发现了这个很棒的库HtmlAgilityPack,它允许您使用 XPath 轻松解析格式不正确的 HTML。我已经在我的 .Net 站点中使用了几年,但我不得不为我的 Python、Ruby 和其他项目适应更痛苦的库。有人知道其他语言的类似库吗?

4

7 回答 7

62

我很惊讶没有提到lxml。它速度极快,可以在任何允许 CPython 库的环境中工作。

以下是使用 lxml 通过 XPATH 解析 HTML的方法。

>>> from lxml import etree
>>> doc = '<foo><bar></bar></foo>'
>>> tree = etree.HTML(doc)

>>> r = tree.xpath('/foo/bar')
>>> len(r)
1
>>> r[0].tag
'bar'

>>> r = tree.xpath('bar')
>>> r[0].tag
'bar'
于 2011-01-20T12:24:30.303 回答
7

在 python 中,ElementTidy解析标签汤并生成一个元素树,它允许使用 XPath 进行查询:

>>> from elementtidy.TidyHTMLTreeBuilder import TidyHTMLTreeBuilder as TB
>>> tb = TB()
>>> tb.feed("<p>Hello world")
>>> e= tb.close()
>>> e.find(".//{http://www.w3.org/1999/xhtml}p")
<Element {http://www.w3.org/1999/xhtml}p at 264eb8>
于 2008-11-14T03:37:03.740 回答
6

我得到的最稳定的结果是使用lxml.html 的soupparser。您需要安装 python-lxml 和 python-beautifulsoup,然后您可以执行以下操作:

from lxml.html.soupparser import fromstring
tree = fromstring('<mal form="ed"><html/>here!')
matches = tree.xpath("./mal[@form=ed]")
于 2012-02-25T04:17:56.950 回答
5

BeautifulSoup是一个很好的 Python 库,用于以简洁的方式处理混乱的 HTML。

于 2008-11-13T02:32:56.667 回答
3

似乎这个问题可以更准确地表述为“如何将 HTML 转换为 XML,以便可以针对它评估 XPath 表达式”。

这里有两个很好的工具:

  1. TagSoup是一个开源程序,是一个基于 Java 和 SAX 的工具,由John Cowan开发。这是一个用 Java 编写的符合 SAX 的解析器,它不是解析格式良好或有效的 XML,而是解析在野外发现的 HTML:糟糕、肮脏和野蛮,尽管通常很不短。TagSoup 是为那些必须使用某种看似合理的应用程序设计来处理这些东西的人设计的。通过提供 SAX 接口,它允许将标准 XML 工具应用于甚至最糟糕的 HTML。TagSoup 还包括一个命令行处理器,它可以读取 HTML 文件,并且可以生成干净的 HTML 或与 XHTML 非常接近的格式良好的 XML。
    Taggle是 TagSoup 的商业 C++ 端口。

  2. SgmlReader是微软的Chris Lovett开发的一个工具。
    SgmlReader 是任何 SGML 文档(包括对 HTML 的内置支持)的 XmlReader API。还提供了一个命令行实用程序,用于输出格式良好的 XML 结果。
    下载包含独立可执行文件和完整源代码的 zip 文件: SgmlReader.zip

于 2008-11-13T03:57:23.003 回答
2

对于 Ruby,我强烈推荐 Jb Evain 指出的 Hpricot。如果您正在寻找更快的基于 libxml 的竞争对手,Nokogiri(参见http://tenderlovemaking.com/2008/10/30/nokogiri-is-released/)也非常好(它支持 XPath 和 CSS 搜索,例如Hpricot 但更快)。有一个基本的wiki和一些基准

于 2008-11-14T01:31:31.807 回答
1

有一个用于 XML 的免费 C 实现,称为 libxml2,它有一些用于 XPath 的 api 位,我已经非常成功地使用了这些位,您可以将 HTML 指定为正在加载的文档。这对我来说适用于一些不太完美的 HTML 文档..

在大多数情况下,当入站 HTML 编码正确并且可以“像 xml 文档”一样阅读时,XPath 最有用。您可能需要考虑使用专门用于此目的的实用程序来清理 HTML 文档。这是一个例子:http ://tidy.sourceforge.net/

就这些 XPath 工具而言,您可能会发现大多数实现实际上是基于预先存在的 C 或 C++ 库,例如 libxml2。

于 2008-11-14T01:42:04.783 回答