Jsoup喜欢用于C ++的html解析器

时间:2013-07-29 10:29:24

标签: c++ html css-selectors jsoup

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

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

6 个答案:

答案 0 :(得分:11)

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

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

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

LibXml

  • 推拉解析器(DOM,SAX)
  • 验证
  • XPath和XPointer支持
  • Cross-Plattform / good documentation

Apache Xerxces

  • 推拉解析器(DOM,SAX)
  • 验证
  • 没有XPath支持(但是这个包?)
  • Cross-Plattform / good documentation

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

更多:

也许你可以将DOM Model / Parser和CSS选择器结合在一起?

答案 1 :(得分:8)

如果您熟悉Qt Framework,最方便的方法是使用QWebElement(参考here)。

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

答案 2 :(得分:6)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

说真的 - 它是一个不错的,毫不含糊的HTML解析器。我没有尝试过用C ++调用它,虽然它应该直截了当。

答案 5 :(得分:1)

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

此库可以解析html或css并将其转换为树模型。您可以使用诸如get_by_id,get_by_class_name,get_by_tag_name之类的方法在经过解析的html中进行搜索,还有一个可以通过css选择器(目前仅支持标签,id,类,嵌套子选择器)进行查询的问题方法。

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