這裏我介紹兩種方法來得到網頁原代碼.一種是WebBrowser方式,一種是XMLHTTP方式(好象美其名曰"AJAX")
這兩個方式各有特點:第一種,一定要完全打開頁面才能觸發事件,根據網絡情況,可能需要時間比較長,但穩定,做錯誤處理比較易。第二種也可以用在網頁上,速度一般是第一種的十倍。但錯誤不易判斷和處理。下面是實例
一、WebBrowser方式,步聚如下:
1、建立一個Winform工程,在form裏添加一個控件WebBrowser,改名爲WebB,另加一按鈕btnGet.
2、在按鈕的單擊事件裏寫下以下代碼:
Private Sub btnGet_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGet.Click
Dim sSearchUrl As String = "www.***.com/"
'關鍵一步,讓控件打開網頁。
WebB.Navigate(sSearchUrl)
End Sub
3、利用WEBBrowser控件的DocumentCompleted事件。
Private Sub WebB_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebB.DocumentCompleted
'得到源代碼
Dim Doc As New Object
Doc = oWebB.Document
Dim i As Object
Dim s As String
Dim ss As String
'網站的代碼都在Doc裏面,彈出s,ss你就知道是怎麼回事了,然後你可以根據要求對s或ss進行分析,分離出來你要的信息。
For Each i In Doc.all
s = i.innertext
ss = i.outerhtml
MsgBox(s)
MsgBox(ss)
Next
End Sub
二、XMLHTTP方式,步聚如下(默認引用就可以,不用單獨引用其它組件):
1、建立一個Winform工程,在form裏添加一個控件按鈕btnGet.
2、在按鈕的單擊事件裏寫下以下代碼:
Private Sub btnGet_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGet.Click
Dim sSearchUrl As String = "http://www.***.com/pages/iq.asp"
Dim sSearchUrl2 As String = "?SearchText=" & aStr(nLocation)
Try
'關鍵一步,自定義函數GetPageSourceCode打開網頁,返回網頁代碼。
Dim sCode As String = GetPageSourceCode(sSearchUrl, sSearchUrl2)
'這是我的自定義函數,大家可以不用去管它,我只用它分離出來我需要的數據。
Me.GetPrice2(sCode, aStr(nLocation))
Catch ex As Exception
TGetPrice2.Enabled = False
If MsgBox("出現一個未知錯誤,還要繼續進行嗎?", MsgBoxStyle.Question) = MsgBoxResult.Yes Then
TGetPrice2.Enabled = True
Else
Exit Sub
End If
End Try
End Sub
3、下面這兩個自定義函數是問題的關鍵:
''' <summary>
''' 獲取網頁源碼函數
''' 注意:有可能網址不存在,函數返回爲空值,故需要對返回值進行判斷。
''' </summary>
''' <param name="urlStr">要獲取的網址</param>
''' <param name="sendStr">需要對該網址傳送的字符參數</param>
''' <param name="charsetStr">設定獲取的網頁編碼格式:如:utf-8 ; gb2312</param>
''' <returns>返回網頁源碼</returns>
''' <remarks></remarks>
Public Function GetPageSourceCode(ByVal urlStr As String, Optional ByVal sendStr As String = "", Optional ByVal charsetStr As String = "gb2312") As String
Try
Dim xmlHttp
xmlHttp = CreateObject("MSXML2.XMLHTTP")
With xmlHttp
.Open("GET", urlStr & sendStr, False)
.Send()
GetPageSourceCode = BytesToBstr(.ResponseBody, charsetStr)
End With
xmlHttp = Nothing
Catch ex As Exception
Throw (ex)
'MsgBox(ex.Message)
End Try
End Function
''' <summary>
''' 數據流字節轉爲字符
''' </summary>
''' <param name="body">要轉換的數據字節</param>
''' <param name="CharSet">設定獲取的網頁編碼格式:如:utf-8 ; gb2312</param>
''' <returns>返回字符串</returns>
''' <remarks></remarks>
Function BytesToBstr(ByVal body, ByVal CharSet)
Dim objstream
objstream = CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode = 3
objstream.Open()
objstream.Write(body)
objstream.Position = 0
objstream.Type = 2
objstream.Charset = CharSet
BytesToBstr = objstream.ReadText
objstream.Close()
objstream = Nothing
End Function
總結一下:
以上是個人根據我的需求,通過網絡諮源整理的結果。不一定成熟和完美,但都親自用過。如果大家都什麼更好的解決方案。可以跟在後面,大家共享一下,以求共同進步。謝謝。