怎么使用 gumbo获取所有 div标签
时间: 2023-05-25 19:04:21 浏览: 157
Gumbo使用指南(Qt版).pdf
要使用Gumbo获取所有 div标签,可以按照以下步骤进行:
1. 包含Gumbo库的头文件。
```
#include <gumbo.h>
```
2. 声明一个指向Gumbo解析树的指针。
```
GumboOutput* output = gumbo_parse("<html>...</html>");
```
3. 编写一个递归函数来遍历解析树并获取所有的 div标签。
```
void find_divs(GumboNode* node) {
if (node->type == GUMBO_NODE_ELEMENT) {
// 如果该节点是一个元素节点,则进一步处理
GumboElement* element = &node->v.element;
if (strcmp(element->tag, "div") == 0) {
// 如果该元素是 div标签,则输出其内容
printf("%s\n", gumbo_normalized_text(element->children));
}
// 递归调用该函数处理该节点的子节点
GumboVector* children = &element->children;
for (unsigned int i = 0; i < children->length; ++i) {
find_divs((GumboNode*)children->data[i]);
}
}
}
```
4. 调用上述函数,传入解析树的根节点。
```
find_divs(output->root);
```
完整示例代码:
```
#include <stdio.h>
#include <gumbo.h>
void find_divs(GumboNode* node) {
if (node->type == GUMBO_NODE_ELEMENT) {
// 如果该节点是一个元素节点,则进一步处理
GumboElement* element = &node->v.element;
if (strcmp(element->tag, "div") == 0) {
// 如果该元素是 div标签,则输出其内容
printf("%s\n", gumbo_normalized_text(element->children));
}
// 递归调用该函数处理该节点的子节点
GumboVector* children = &element->children;
for (unsigned int i = 0; i < children->length; ++i) {
find_divs((GumboNode*)children->data[i]);
}
}
}
int main() {
// 解析HTML文档,获取解析树
GumboOutput* output = gumbo_parse("<html><head><title>Title</title></head><body><div>Div 1</div><div>Div 2</div></body></html>");
// 查找所有 div标签,输出其内容
find_divs(output->root);
// 释放内存
gumbo_destroy_output(&kGumboDefaultOptions, output);
return 0;
}
```
阅读全文