HTML解析庫Gumbo簡單使用記錄

2022-03-22 20:23:19 字數 2889 閱讀 6748

目錄2、簡單的使用

gumbo是谷歌開源的乙個純c編寫的html解析庫,效能很好,就是用起來比較麻煩。

github位址

還有乙個c++封裝的版本

關於html的參考,可見

最近準備寫乙個爬蟲,用於爬取epsg.io上的資料,所以找了這個庫用於html的解析。其實我這個簡單的爬取固定位置的內容,用這個實在是有點殺雞用牛刀了,直接做字串搜尋會更方便。

關於這個的使用,網上找不到太多的資料。

這裡有乙個

對於乙個gumbonode結構體物件,需要通過它的gumbonodetype type字段判斷其型別後,可根據型別對成員v進行操作。

v是乙個union物件,它可以是gumbodocumentgumboelementgumbotext三種型別之一。

1、gumbo_node_document 文件節點

文件節點表示的是乙個完整的html文件,就是從之間的全部資訊。對於v可取gumbodocument型別的成員document

對於文件節點,其內部包含的元素節點都在gumbovector children中。

2、gumbo_node_element 元素節點

只要是含有標籤tag的部分,都是元素節點。這個可以簡單的理解為,只要是《標籤名》或插入),則這將是乙個零長度字串。

*/gumbostringpiece original_tag;

/*** 指向此元素的原始結束標記文字的gumbostringpiece。

* 如果以演算法方式插入結束標記(例如,關閉自閉標記),則這將是乙個零長度字串。

*/gumbostringpiece original_end_tag;

/** 記錄元素開始標籤在**字串中的起始位置。 */

gumbosourceposition start_pos;

/** 記錄元素結束標籤在**字串中的起始位置。 */

gumbosourceposition end_pos;

/*** gumboattributes陣列,按照解析順序包含此元素標籤的屬性

* 陣列儲存的是gumboattribute的指標

*/gumbovector /* gumboattribute* */ attributes;

} gumboelement;3、gumbo_node_text 文字節點

文字節點,對於v可取gumbotext型別的成員text

gumbo在解析的時候,對於\r\n這種都會解析為乙個獨立的檔案節點。

4、gumbo_node_cdata

cdata節點是乙個比較特殊的節點,這個節點用於傳輸需要瀏覽器不做解析,原封不動的當做文字的內容。所以對於v也是取gumbotext型別的成員text

5、gumbo_node_comment

注釋節點,這個用於儲存html中的注釋,對於這個節點,對於v也是取gumbotext型別的成員text。取出來的gumbotext物件中的text成員不包含注釋分隔符

6、gumbo_node_whitespace

這是乙個文字節點的特例,文字的內容都是空白字元(空格、tab、回車)。v也是取gumbotext

7、gumbo_node_template

模板節點。就是標籤包含的部分。

這與gumbo_node_element是分開的,因為許多客戶端庫都希望忽略模板節點的內容,如規範所示。 在gumbo_node_element上遞迴會在這裡做正確的事情,而想要包含模板內容的客戶端也應該檢查gumbo_node_template。 v將是乙個gumboelement。

為了方便使用,我簡單的封裝了兩個函式,對於我的使用已經足夠了。如果需要更方便的使用,可以考慮

1、用於方便一點的查詢子節點的

std::vectorfind_sub_node(const gumbonode* parentnode,

gumbonodetype type, gumbotag tag, int attrcount, ...)

int pattend = 0;

va_list vl;

va_start(vl, attrcount);

for (int ai = 0; ai < attrcount; ++ai)

pattend += 1;

} va_end(vl);

if (pattend == attrcount)

} return subnode;

}

2、用於方便的查詢文字子節點的
std::vectorfind_sub_text(const gumbonode* parentnode)

} return subtext;

}

python簡單的HTML解析

coding utf 8 引入相關模組 import json import requests from bs4 import beautifulsoup url wbdata requests.get url text 對獲取到的文字進行解析 soup beautifulsoup wbdata,l...

HTML 中Doctype簡單解析

public w3c dtd xhtml 1.0 frameset en 其中doctype物件定義了文件的根元素是html,它在公共識別符號被定義為 w3c dtd xhtml 1.0 strict en 的 dtd 中進行了定義。瀏覽器將明白如何尋找匹配此公共識別符號的 dtd。如果找不到,瀏覽...

python中html解析庫使用

python中解析網頁常用的兩個庫 對於新手來說是利器 from bs4 import beautifulsoup from lxml import etreefrom bs4 import beautifulsoup soup beautifulsoup html,lxml kuai sou.se...