我一直在编写一些代码来从Java中的某些页面获取一些数据,Jsoup是最好的库。但是,不幸的是我必须将整个代码移植到C / C ++。但是我找不到在c ++上使用的任何体面的html解析器。是否有类似C ++的Jsoup库或者如何实现类似的结果?
[目前我正在使用Curl获取页面源并漫游互联网以查找html解析器]
答案 0 :(得分:11)
不幸的是,我猜没有像C ++的Jsoup这样的解析器...
除了这里已经提到过的库之外,还有一个关于C ++(也是一些C语言)解析器的很好的概述:Free C or C++ XML Parser Libraries
对于解析我使用TinyXML-2进行(Html-)DOM解析;它是一个非常小的(只有2个文件)库,可以在大多数操作系统(甚至非桌面)上运行。
如果您使用的是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中。