如果要對html進行解析,提取html的資料或者修改html資料,htmlparser是乙個不錯的選擇.
使用htmlparser可以解析本地和網路上的html資料:
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資料的文字框
//記錄個節點的起始位置,避免重複處理
iliststart = 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.http.httpprotoc...
使用HTMLParser解析html
前幾天遇到乙個問題,需要把網頁中的一部分內容挑出來,於是找到了urllib和htmlparser兩個庫.urllib可以將網頁爬下來,然後交由htmlparser解析,初次使用這個庫,在查官方文件時也遇到了一些問題,在這裡寫下來與大家分享.from htmlparser import htmlpar...
HtmlParser進行解析原理
htmlparser主要靠node abstractnode和tag來表達html 1.node是形成樹結構表示html的基礎,所有的資料表示都是介面node的實現,node定義了與頁面樹結構所表達的頁面page物件,定義了獲取父 子 兄弟節點的方法,定義了節點到對應html文字的方法,定義了該節點...