使用HtmlParser解析HTML

2021-09-05 20:08:00 字數 3459 閱讀 9678

如果要對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文字的方法,定義了該節點...