使用C语言解析HTML

17

我需要从一个HTML(XHTML有效)页面中获取一些内容。我使用curl抓取页面并将其存储在内存中。

我尝试过使用PCRE库中的正则表达式来实现,但是我无法找到任何使用C语言进行编写的示例。然后我开始查看HTML解析器,但我没有找到很好的选择。我所能找到的只是一个名为HTMLparser的libxml模块,文档也很简单。

有没有其他替代方案?如果没有,那么你能提供一些我已经找到的例子吗?


4
强制性警告:不建议使用正则表达式来解析HTML。请参考以下链接了解详情:https://dev59.com/X3I-5IYBdhLWcg3wq6do#1732454 - moopet
请参考以下链接,我使用libxml2 C库为Windows平台编写了整个解决方案。https://dev59.com/NW035IYBdhLWcg3wW-z1#38826052 - Pankaj Vavadiya
5个回答

13
你想使用HTML Tidy来实现这个功能。Lib curl网页有一些源代码可以帮助你开始。文档遍历DOM树。你不需要XML解析器。并且它不会因为格式不正确的HTML而失败。 http://curl.haxx.se/libcurl/c/htmltidy.html

这就是我最终实现的。我觉得没必要使用一个饥饿的XML解析器来仅仅获取一行文本。谢谢。 - user185216

8

2
仅供读者参考... HTML解析器是用于自动解析超文本标记语言(HTML)的软件。它们有两个主要目的: HTML遍历:提供一个接口,使程序员可以轻松访问和修改“HTML字符串代码”。典型示例:DOM解析器。 HTML清理:修复无效的HTML并改善生成标记的布局和缩进样式。典型示例:HTML Tidy。 - Pankaj Vavadiya

3
谷歌最近开发了一款纯C99库,用于解析HTML,特别是HTML5。它可以轻松地在任何C程序中使用,并且正在积极开发中。 https://github.com/google/gumbo-parser

大多数更改是两年前进行的,HTML5标准已经被定义,代码不是有点过时了吗? - Lucas Steffen
1
谷歌刚刚归档了该存储库并注明:“自2016年以来,此项目未得到维护,不应再使用。” - handle

2
如果你想使用C语言解析XML,那么目前最好的方法是使用LibXML库。主页在http://xmlsoft.org/。除了提供下载外,他们还有明确的代码示例,专门展示如何处理解析。我知道事实上你可以获取Mac和Windows预编译版本,大多数Linux和BSD发行版已经包含它,如果你愿意也可以从源代码构建。

1
不错的选择,但它会在错误的 HTML 上阻塞,所以我建议先通过 libtidy 运行它。 - Michael Krelin - hacker

2
快速的C/C++ HTML 5解析器。使用线程。 https://github.com/lexborisov/myhtml 更新于2023年。使用来自Lexbor项目的HTML解析器。它稳定、功能更多,而且——是的——非常快速。它是myhtml的合理继任者。

2
myhtml项目似乎已经停止维护,并建议使用lexbor(https://github.com/lexbor/lexbor)代替。 - Brecht Sanders
是的,你说得对。最后一次更新已经被替换了。 - EgoPingvina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接