2007年2月23日星期五

HTML Parsing - 從HTML和DOM中找出Tag與Tag之間的Value

記得約4年前我用VB6寫那個Yahoo Webcam Viewer的時間,由於要引用日本幾個YM User網頁的Yahoo ID List,所以要用INet Control把HTML Import成String再搜查當中的Yahoo ID,當時花少很多時間在截取字串方面.今天這個時候,轉至VB.NET後,我著手寫無名小站相簿下載軟件,同樣需要擷取HTML中的所有Img Src.當然功力上總會好過以前,在找.NET Framework下,有什麼Class可以做到時,發現是沒有的.當然在.NET下用WebClient下載文件沒有問題,傳送HTTP Header都沒有問題,但想想有什麼計可以準確無錯地取得Img Src就真是苦惱....

其中有三個辦法,
  1. 第一個是,使用Regular Expression,但如要從HTML碼中以String方式去找的話,效能可能會很慢.
  2. 第二個是,用HTML Agility把HTML轉成XML,看當成XMLDocument去讀取,但編譯後的HTML,未必有一定的格式化,談不談得上是標準的DOM都成問題.
  3. 第三個是使用SGML Reader,但我對這個不太熟悉.

所有唯有考慮1和2的方案.
使用Regular Expression配合StringBuilder用都不會太慢,但不同的Tag需要不同的Regular Expression,這方面就要下點功夫了.

第二的是,用CodePlex的Html Agility Pack
把HTML文件轉成XML,以XPATH方法去取得Value.使用方法就自行看Readme.

始終我都覺得用 Regular Expression 自由度好像比較大一些.
其實還有很多技巧,不過不在這裡大費周張,有什麼問題可以留言給我.

沒有留言:

發佈留言