2009年3月5日 星期四

好用的WebBrowser

在VS.NET 2005中,有內建一個WebBrowser的控制項。可以簡單的利用 WebBrowser 去抓取特定網站的資料。

原本只是好奇,想說如何寫一個機器人,自動連到某個網址,幫我把我想要的資料抓下來,才開始對WebBrowser這個控制項做研究。

在一邊爬文,一邊測試的過程中發現,WebBrowser真的可以做到無所不抓。那怕網頁的資料是用JavaScript呈現出來的,WebBrowser都能抓,只要眼睛看的到都抓的到。

在這邊跟大家分享幾個簡單的小技巧

如果要連到特定網址,下面這一行就可以搞定了

Me.WebBrowser1.Navigate("http://www.ithome.com.tw")

至於內容的解析的部份,就必須利用HtmlDocument以及HtmlElement這兩個物件的威力

使用方式如下:

Dim oDoc As HtmlDocument = Me.WebBrowser1.Document
Dim oEles As HtmlElementCollection = Nothing
Dim oEle As HtmlElement = Nothing

oEles = oDoc.GetElementsByTagName("TABLE")

For i As Integer = 0 To oEles.Count - 1
Dim str_innerHTML As String = ""
Dim str_innerText As String = ""
oEle = oEles(i)

str_innerHTML = oEle.InnerHtml
str_innerText = oEle.InnerText
Next

在取得網頁內容的時候,必須要先等WebBrowser下載完整個網頁內容,才能取得正確的值。

oDoc 是 HtmlDocument 宣告出來的物件,用來取得WebBrowser網頁剖析過後的DOM 物件

oEles 是 HtmlElementCollection 宣告出來的物件,用來存放多筆的HtmlElement

而 HtmlElement 就是用來存取網頁DOM節點資料的物件

很簡單吧,oEle.innerHTML 就可以取得該節點的內部HTML資料

而 oEle.innerText 就可以取得 這個節點的文字內容..!!!!

標準的解析方式可以先宣告一個

Dim oBody as HtmlElement = oDoc.GetElementsByTagName("BODY")(0)

來取得該網頁 <BODY> 的節點

oEles = oBody.Children

就可以取得 <BODY> 節點底下的 子結點

子結點的內容,就可以透過下面這個程式碼來取得

For i As Integer = 0 To oEles.Count - 1
oEle = oEles(i)

Next

..^^..我試過了,真的什麼都可以抓!

沒有留言:

張貼留言