记一个html解析开源库的使用

前言

想找到一个c++的html解析库,网上浏览了一下,原本想用google的gumbo + gumbo-query,但是编译始终报错,我在ubuntu16.04和18.04上都做了尝试,几天也解决不了后,决定找其他的库。然后就找到了Modest
        介绍:Modest包含了myhtmlmycss,其中myhtml没有任何外部依赖关系,mycss依赖myhtml项目。如果没有特殊的情况,直接下载Modest就好了。里面包含了myhtml和mycss的东西。
  编译:下载后,按照INSTALL.md指引就好了

make
sudo make install prefix=/usr/local/

查看官方例子

解析html的步骤1必备
    // basic init
    myhtml_t* myhtml = myhtml_create();
    myhtml_init(myhtml, MyHTML_OPTIONS_DEFAULT, 1, 0);

    // init tree
    myhtml_tree_t* tree = myhtml_tree_create();
    myhtml_tree_init(tree, myhtml);

    // parse html
    myhtml_parse(tree, MyENCODING_UTF_8, response.c_str(), strlen(response.c_str()));
2.1输出解析结果:head、body等
     myhtml_serialization_tree_callback(tree->node_head,serialization_callback,NULL);	//head
     myhtml_serialization_tree_callback(tree->node_body,serialization_callback,NULL);	//body
     myhtml_serialization_tree_callback(tree->node_form,serialization_callback,NULL);	//表单
     myhtml_serialization_tree_callback(tree->node_html,serialization_callback,NULL);	//html
2.2输出解析结果:只输出某类标签属性

修改myhtml_get_nodes_by_tag_id中的第三个参数获取对应的属性

    // get and print
    myhtml_collection_t *titles_list = myhtml_get_nodes_by_tag_id(tree, NULL, MyHTML_TAG_A, NULL);
	myhtml_serialization_node_callback(collection_first->list[0],serialization_callback,NULL);
}

解析结果,其实在这里回调触发了多次,才输出完一个标签的信息
在这里插入图片描述
获取全部解析结果print_found_result("Result", tree,titles_list);

    void print_found_result(const char* caption, myhtml_tree_t* html_tree, myhtml_collection_t *collection)
    {
    if(collection) {
        printf("%s:\n", caption);

        for(size_t i = 0; i < collection->length; i++) {
            printf("\t\n\n");
            myhtml_serialization_node_callback(collection->list[i], serialization_callback, NULL);
        }

        printf("\n");
    }
    else {
        printf("%s: empty\n", caption);
    }

通过回调获取到筛选出来的属性

mystatus_t serialization_callback(const char* data, size_t len, void* ctx)
{
    printf("%.*s", (int)len, data);
    return MyCORE_STATUS_OK;
}

返回结果
返回结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值