19

我一直在编写一些代码来从 Java 中的某些页面获取一些数据,而 Jsoup 是最好的库之一。但是,不幸的是,我必须将整个代码移植到 C/C++。但是我找不到任何可以在 c++ 上使用的像样的 html 解析器。是否有任何类似于 C++ 的 Jsoup 库或如何实现类似的结果?

[目前我正在使用 Curl 获取页面的来源并在互联网上漫游以查找 html 解析器]

4

6 回答 6

13

不幸的是,我猜没有像 Jsoup 这样的 C++ 解析器......

除了这里已经提到的库之外,这里还有一个关于 C++(也有一些 C)解析器的很好的概述:Free C or C++ XML Parser Libraries

对于解析,我使用TinyXML-2进行(Html-)DOM 解析;这是一个非常小的(只有 2 个文件)库,可以在大多数操作系统(甚至非桌面)上运行。

LibXml

  • 推拉解析器(DOM、SAX)
  • 验证
  • XPath 和 XPointer 支持
  • 跨平台/良好的文档

Apache Xerxces

  • 推拉解析器(DOM、SAX)
  • 验证
  • 不支持 XPath(但有一个包吗?)
  • 跨平台/良好的文档

如果您使用 C++ CLI,请查看NSoup - .NET 的 Jsoup 端口。

多一点:

也许您可以将 DOM 模型/解析器和 CSS 选择器组合在一起?

于 2013-08-07T13:41:31.403 回答
9

如果您熟悉 Qt 框架,最方便的方法是使用QWebElement(参考这里)。

否则,(正如另一篇文章所建议的)使用Tidy将 HTML 转换为有效的 XML,然后使用 XML 解析器(如libxml++)是一个不错的选择。您可以在此处找到显示这两个步骤的示例代码。

于 2013-08-04T20:09:03.603 回答
7

Chromium 有一个开源解析器。此外,Google gumbo-parser看起来很酷。

于 2014-12-27T00:24:10.900 回答
2

是的,有一个用于 c++ 的 html 解析器库,请查看 https://github.com/HamedMasafi/HtmlParser/

该库可以解析 html 或 css 并将其转换为树模型。您可以通过以下方法在已解析的 html 中搜索:get_by_id、get_by_class_name、get_by_tag_name,还有一个可以通过 css 选择器搜索的问题方法(目前仅支持标签、id、类、嵌套子选择器)。

找到一个孩子后,您可以更改它的属性,最后您可以以紧凑和漂亮的模式将 html 打印到 std::string 中。

于 2019-02-06T09:53:09.627 回答
1

如果你不介意从 C++ 调用 python,你可以使用Beautiful Soup。至少名字是对的!

说真的 - 这是一个不错的、严肃的 HTML 解析器。我没有尝试从 C++ 调用它,尽管它应该是直截了当的。

于 2013-08-07T15:36:09.107 回答
1

您可以使用xerces2作为 DOM 解析器。

或者使用HTML Tidy清理 HTML 并将其转换为 XHTML,然后使用pugixml或类似的 XML 解析器解析 XML。而且由于 pugixml 是一个非验证解析器,它也可以在原始 HTML 上工作,而无需先在其上运行 HTML Tidy。

于 2013-07-31T18:41:06.953 回答