在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
..^^..我試過了,真的什麼都可以抓!
沒有留言:
張貼留言