类似J汤的C++html解析器

Jsoup like html parser for C++

本文关键字:C++html 汤的 类似      更新时间:2023-10-16

我一直在用Java编写一些代码来从一些页面获取一些数据,Jsoup是最好的库之一。但是,不幸的是,我不得不将整个代码移植到C/C++。但是我找不到任何像样的html解析器在c++上使用。C++是否有类似J汤的库?或者如何才能获得类似的结果?

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

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

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

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

LibXml

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

Apache Xexces

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

如果您使用C++CLI,请查看NSoup-用于.NET.的J汤端口

更多:

  • 用于C的htmlcxx-html和css API++
  • MSHTML(?)
  • pugixml(DOM/XPath和Unicode支持)
  • LibCSS(CSS Parser)/LibDOM(DOM)(不过,两者都在C中)
  • hcxselect(C++的CSS选择器引擎)

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

如果您熟悉Qt Framework,最方便的方法是使用QWebElement(请参阅此处)。

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

Chromium有一个开源解析器。此外,谷歌口香糖解析器看起来很酷。

是的,有一个用于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。

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

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

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

说真的,这是一个不错的,没有废话的HTML解析器。我还没有尝试从C++中调用它,尽管它应该是直接的