一、相關資料html
官方文檔:http://htmlparser.sourceforge.net/samples.htmljava
API:http://htmlparser.sourceforge.net/javadoc/index.htmlnode
其它HTML 解釋器:jsoup等。因爲HtmlParser自2006年之後就再沒更新,目前不少人推薦使用jsoup代替它。api
二、使用HtmlPaser的關鍵步驟ide
(1)經過Parser類建立一個解釋器函數
(2)建立Filter或者Visitor工具
(3)使用parser根據filter或者visitor來取得全部符合條件的節點測試
(4)對節點內容進行處理ui
三、使用Parser的構造函數建立解釋器編碼
Parser() Zero argument constructor. |
Parser(Lexer lexer) Construct a parser using the provided lexer. |
Parser(Lexer lexer, ParserFeedback fb) Construct a parser using the provided lexer and feedback object. |
Parser(String resource) Creates a Parser object with the location of the resource (URL or file). |
Parser(String resource, ParserFeedback feedback) Creates a Parser object with the location of the resource (URL or file) You would typically create a DefaultHTMLParserFeedback object and pass it in. |
Parser(URLConnection connection) Construct a parser using the provided URLConnection. |
Parser(URLConnection connection, ParserFeedback fb) Constructor for custom HTTP access. |
四、HtmlPaser使用Node對象保存各節點信息
(1)訪問各個節點的方法
Node getParent ():取得父節點
NodeList getChildren ():取得子節點的列表
Node getFirstChild ():取得第一個子節點
Node getLastChild ():取得最後一個子節點
Node getPreviousSibling ():取得前一個兄弟(很差意思,英文是兄弟姐妹,直譯太麻煩並且不符合習慣,對不起女同胞了)
Node getNextSibling ():取得下一個兄弟節點
(2)取得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訪問Node節點及其內容
(1)Filter的種類
顧名思義,Filter就是對於結果進行過濾,取得須要的內容。
全部的Filter均實現了NodeFilter接口,此接口只有一個方法Boolean accept(Node node),用於肯定某個節點是否屬於此Filter過濾的範圍。
HTMLParser在org.htmlparser.filters包以內一共定義了16個不一樣的Filter,也能夠分爲幾類。
判斷類Filter:
TagNameFilter
HasAttributeFilter
HasChildFilter
HasParentFilter
HasSiblingFilter
IsEqualFilter
邏輯運算Filter:
AndFilter
NotFilter
OrFilter
XorFilter
其餘Filter:
NodeClassFilter
StringFilter
LinkStringFilter
LinkRegexFilter
RegexFilter
CssSelectorNodeFilter
除此之外,能夠自定義一些Filter,用於完成特殊需求的過濾。
(2)Filter的使用示例
如下示例用於提取HTML文件中的連接
程序中的一些說明:
(1)經過Node#getText()取得節點的String。
(2)node instanceof TagLink,即<a/>節點,其它還有不少的相似節點,如tableTag等,基本上每一個常見的html標籤均會對應一個tag。官方文檔說明以下:
org.htmlparser.nodes | The nodes package has the concrete node implementations. |
org.htmlparser.tags | The tags package contains specific tags. |
其中用到的LinkFilter接口定義以下:
測試程序以下:
http://www.hao123.com http://www.baidu.com/ http://www.baidu.com/duty/ http://v.baidu.com/v?ct=301989888&rn=20&pn=0&db=0&s=25&word= http://music.baidu.com http://ir.baidu.com http://www.baidu.com/gaoji/preferences.html http://news.baidu.com http://map.baidu.com http://music.baidu.com/search?fr=ps&key= http://image.baidu.com http://zhidao.baidu.com http://image.baidu.com/i?tn=baiduimage&ct=201326592&lm=-1&cl=2&nc=1&word= http://www.baidu.com/more/ http://shouji.baidu.com/baidusearch/mobisearch.html?ref=pcjg&from=1000139w http://wenku.baidu.com http://news.baidu.com/ns?cl=2&rn=20&tn=news&word= https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F http://www.baidu.com/cache/sethelp/index.html http://zhidao.baidu.com/q?ct=17&pn=0&tn=ikaslist&rn=10&word=&fr=wwwt http://tieba.baidu.com/f?kw=&fr=wwwt http://home.baidu.com https://passport.baidu.com/v2/?reg®Type=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F http://v.baidu.com http://e.baidu.com/?refer=888 ; http://tieba.baidu.com http://baike.baidu.com http://wenku.baidu.com/search?word=&lm=0&od=0 http://top.baidu.com http://map.baidu.com/m?word=&fr=ps01000