這篇文章給大家介紹一個解析html內容的模塊——htmlparser。
舉一個簡單的應用場景:假設有一天領導需要你收集一下線上頁面已存在的靜態資源鏈接(js、css、img),你們的頁面很多,而且每個頁面的代碼量很大(比如上萬行),這種情況下你總不能人肉去搜索,那么此時htmlparser這個模塊就可以派上用場了。
簡單使用
安裝命令
npm install htmlparser
圖1
圖1中我們使用htmlparser模塊解析一個i.html文件,其內容如下:
圖2
解析結果如下:
圖3
圖3所示是個對象(此處序列化了便于顯示),遍歷這個對象就可以解決本文開頭所說的問題,這個模塊的用法非常的簡單。
原理分析
回到圖1,htmlparser模塊給我提供了一個Parser構造函數,這個構造函數是初始化的入口!它大概長這個樣子:
function Parser(handler) {
this._handler = handler;
}
Parser接受一個參數handler,這個handler必須是一個對象,這個對象必須定義以下幾個方法:
- reset方法主要做一些重置工作;
- done方法完成解析后調用,此處可以執行自定義回調函數;
- writeTag方法處理tag標簽;
- writeText方法處理純文本信息
- writeComment方法處理注釋信息;
- writeDirective方法處理<!…>這樣的標簽信息,比如<!DOCTYPE html>。
圖1中我們使用的是模塊內部提供的DefaultHandler,我們當然也可以自己定義handler。用別人的handler有時并不能完全滿足自己的業務場景,那么我們操作一把,代碼如下:
圖4
圖4中我們自定義一個handler——CustomHandler,我們先運行一下看看各個方法都輸出了什么?
圖5
圖5中CustomHandler的各個方法按照原始字符串的順序依次打印出了每個解析結果,這些解析結果是parser對象為我們自動生成的,解析的原理就是正則匹配。我們可以在自定義handler的各個函數方法中做一些特殊處理,然后把最終的結果通過done函數輸出出去。
圖4中的parseComplete方法也可以用以下邏輯代替,
parser.reset();
parser.parseChunk(html);
parser.done();
這個模塊除了可以在node環境中使用,它同時也可以在瀏覽器中使用,用法如下:
圖6
圖7
注意,如果在瀏覽器中使用,模塊的所有API都掛在了
Tautologistics.NodeHtmlParser這個對象上,其它用法一致。
總結
需要我們去解析html內容的場景非常多,之前我們更多的是使用自己寫的正則表達式去做,麻煩并且容易出錯。現在我們了解了htmlparser模塊,以后就可以直接使用它去解決問題。
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。