使用HtmlParser解析HTML

2021-05-25 00:43:52 字數 2951 閱讀 8411

如果要對html進行解析,提取html的資料或者修改html資料,htmlparser是乙個不錯的選擇. 使用htmlparser可以解析本地和網路上的html資料: parser parser = new parser( new winista.text.htmlparser.http.httpprotocol(new uri("uristring"))); parser parser = new parser( new winista.text.htmlparser.lex.lexer( "htmlstring" ) ); system.io.stream stream = new system.io.filestream( "filepath" , system.io.filemode.open ); parser parser = new parser( new winista.text.htmlparser.lex.lexer( new winista.text.htmlparser.lex.page( stream ,"charset") ) ); 還可以分析某些特定節點的資料,使用 nodeclassfilter 指定要分析的節點型別: nodefilter filter = new nodeclassfilter( typeof( winista.text.htmlparser.tags.div ) ); 使用parser例項的parse方法可以獲得節點陣列 nodelist nodelist = parser.parse( null ); nodelist nodelist = parser.parse( filter); 現在分析一下的一段html:

div_2

htmlparser

htmlparser

txtresult是顯示分析處理後的資料,txtsource是讀取html資料的文字框 //記錄個節點的起始位置,避免重複處理 ilist

start = new list

( ); protected void button1_click ( object sender , eventargs e ) } } private itag gettag ( inode node ) private void paserdata ( inode node) //子節點 if ( node.children != null && node.children.count > 0 ) //兄弟節點 inode siblingnode = node.nextsibling; while ( siblingnode != null ) } txtresult顯示的資料為: div: id:div_1 name: class:divcss startposition:0 div: id:div_2 name:div class:divcss startposition:34 table: id:table_1 name:table class: startposition:90 tr: id: name: class: startposition:127 td: id: name: class: startposition:136 td: id: name: class: startposition:160 div: id:div_3 name: class: startposition:164 font: id: name: class: startposition:180 htmlparser將我們指定的資料給分析出來了,現在來對要分析的資料進行一些修改:給沒有name和class屬性的指定屬性: object oid = tag.getattribute( "id" ); object oname = tag.getattribute( "name" ); object oclass = tag.getattribute( "class" ); if ( oname == null ) if ( oclass == null ) this.txtresult.text += tag.tagname + ":/r/nid:" + oid + " name:" + oname + " class:" + oclass + " startposition:" + tag.startposition.tostring( ) + "/r/n"; start.add( tag.startposition ); txtresult顯示的資料為: div: id:div_1 name:name class:divcss startposition:0 div: id:div_2 name:div class:divcss startposition:34 table: id:table_1 name:table class:class startposition:90 tr: id: name:name class:class startposition:127 td: id: name:name class:class startposition:136 td: id: name:name class:class startposition:160 div: id:div_3 name:name class:class startposition:164 font: id: name:name class:class startposition:180 htmlparser實現了我們的目的,現在在給節點為div並且id為div_3的節點新增乙個子節點: object oid = tag.getattribute( "id" ); object oname = tag.getattribute( "name" ); object oclass = tag.getattribute( "class" ); if ( tag.tagname == "div" && tag.getattribute( "id" ) == "div_3" ) this.txtresult.text += tag.tagname + ":/r/nid:" + oid + " name:" + oname + " class:" + oclass + " startposition:" + tag.startposition.tostring( ) + "/r/n"; 輸出nodelist[0].tohtml( ):

div_2

htmlparser

htmlparseradd a new node

id為div_3的div節點後面加上了要新增的資料.

使用HtmlParser解析HTML

如果要對html進行解析,提取html的資料或者修改html資料,htmlparser是乙個不錯的選擇.使用htmlparser可以解析本地和網路上的html資料 parser parser new parser new winista.text.htmlparser.lex.lexer new w...

使用HTMLParser解析html

前幾天遇到乙個問題,需要把網頁中的一部分內容挑出來,於是找到了urllib和htmlparser兩個庫.urllib可以將網頁爬下來,然後交由htmlparser解析,初次使用這個庫,在查官方文件時也遇到了一些問題,在這裡寫下來與大家分享.from htmlparser import htmlpar...

HtmlParser進行解析原理

htmlparser主要靠node abstractnode和tag來表達html 1.node是形成樹結構表示html的基礎,所有的資料表示都是介面node的實現,node定義了與頁面樹結構所表達的頁面page物件,定義了獲取父 子 兄弟節點的方法,定義了節點到對應html文字的方法,定義了該節點...