我一直在编写一些代码来从 Java 中的某些页面获取一些数据,而 Jsoup 是最好的库之一。但是,不幸的是,我必须将整个代码移植到 C/C++。但是我找不到任何可以在 c++ 上使用的像样的 html 解析器。是否有任何类似于 C++ 的 Jsoup 库或如何实现类似的结果?
[目前我正在使用 Curl 获取页面的来源并在互联网上漫游以查找 html 解析器]
我一直在编写一些代码来从 Java 中的某些页面获取一些数据,而 Jsoup 是最好的库之一。但是,不幸的是,我必须将整个代码移植到 C/C++。但是我找不到任何可以在 c++ 上使用的像样的 html 解析器。是否有任何类似于 C++ 的 Jsoup 库或如何实现类似的结果?
[目前我正在使用 Curl 获取页面的来源并在互联网上漫游以查找 html 解析器]
不幸的是,我猜没有像 Jsoup 这样的 C++ 解析器......
除了这里已经提到的库之外,这里还有一个关于 C++(也有一些 C)解析器的很好的概述:Free C or C++ XML Parser Libraries
对于解析,我使用TinyXML-2进行(Html-)DOM 解析;这是一个非常小的(只有 2 个文件)库,可以在大多数操作系统(甚至非桌面)上运行。
如果您使用 C++ CLI,请查看NSoup - .NET 的 Jsoup 端口。
多一点:
也许您可以将 DOM 模型/解析器和 CSS 选择器组合在一起?
如果您熟悉 Qt 框架,最方便的方法是使用QWebElement(参考这里)。
否则,(正如另一篇文章所建议的)使用Tidy将 HTML 转换为有效的 XML,然后使用 XML 解析器(如libxml++)是一个不错的选择。您可以在此处找到显示这两个步骤的示例代码。
Chromium 有一个开源解析器。此外,Google gumbo-parser看起来很酷。
是的,有一个用于 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 中。
如果你不介意从 C++ 调用 python,你可以使用Beautiful Soup。至少名字是对的!
说真的 - 这是一个不错的、严肃的 HTML 解析器。我没有尝试从 C++ 调用它,尽管它应该是直截了当的。