【垂直搜尋引擎搭建12】htmlparser簡介
阿新 • • 發佈:2019-01-01
1、相關資料
2、使用HtmlPaser的關鍵步驟
(1)通過Parser類建立一個直譯器
(2)建立Filter或者Visitor
(3)使用parser根據filter或者visitor來取得所有符合條件的節點
(4)對節點內容進行處理
3、使用Parser的建構函式建立直譯器
- Parser()
- Parser(Lexer lexer)
- Parser(Lexer lexer, ParserFeedback fb)
- Parser(String resource)
- Parser(String resource, ParserFeedback feedback)
- Parser(URLConnection connection)
- Parser(URLConnection connection, ParserFeedback fb)
4、htmlparser對html頁面處理的資料結構
HtmlParser主要靠Node、AbstractNode和Tag來表達Html,因為Remark和Text相對簡單,此處就將其忽略了。
- Node是形成樹結構表示HTML的基礎,所有的資料表示都是介面Node的實現,Node定義了與頁面樹結構所表達的頁面Page物件,定義了獲取父、子、兄弟節點的方法,定義了節點到對應html文字的方法,定義了該節點對應的起止位置,定義了過濾方法,定義了Visitor訪問機制。
- AbstractNode是Node的一種具體的類實現,起到構成樹形結構的作用,除了同具體Node相關的accetp方法,toString,toHtml,toPlainTextString方法以外,AbstractNode實現了大多基本的方法,使得它的子類,不用理會具體的樹操作。
- Tag是具體分析的主要內容。Tag分成composite的Tag和不能包含其他Tag的簡單Tag兩類,其中前者的基類是CompositeTag,其子類包含BodyTag,Div,FrameSetTag,OptionTag等27個子類;而簡單Tag有BaseHrefTag、DoctypeTag,FrameTag,ImageTag,InputTag,JspTag,MetaTag,ProcessingInstructionTag這八類。
Node分成三類:
- RemarkNode:代表Html中的註釋
- TagNode:標籤節點,是種類最多的節點型別,上述Tag的具體節點類都是TagNode的實現。
- TextNode:文字節點
5、Node中包含的方法
對於樹型結構進行遍歷的函式,這些函式最容易理解:
Node getParent ():取得父節點
NodeList getChildren ():取得子節點的列表
Node getFirstChild ():取得第一個子節點
Node getLastChild ():取得最後一個子節點
Node getPreviousSibling ():取得前一個兄弟
Node getNextSibling ():取得下一個兄弟節點
取得Node內容的函式:
String getText ():取得文字
String toPlainTextString():取得純文字資訊。
String toHtml () :取得HTML資訊(原始HTML)
String toHtml (boolean verbatim):取得HTML資訊(原始HTML)
String toString ():取得字串資訊(原始HTML)
Page getPage ():取得這個Node對應的Page物件
int getStartPosition ():取得這個Node在HTML頁面中的起始位置
int getEndPosition ():取得這個Node在HTML頁面中的結束位置
用於Filter過濾的函式:
void collectInto (NodeList list, NodeFilter filter):基於filter的條件對於這個節點進行過濾,符合條件的節點放到list中。
用於Visitor遍歷的函式:
void accept (NodeVisitor visitor):對這個Node應用visitor
用於修改內容的函式,這類用得比較少:
void setPage (Page page):設定這個Node對應的Page物件
void setText (String text):設定文字
void setChildren (NodeList children):設定子節點列表
其他函式:
void doSemanticAction ():執行這個Node對應的操作(只有少數Tag有對應的操作)
Object clone ():介面Clone的抽象函式。