这里我介绍两种方法来得到网页原代码.一种是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
总结一下:
以上是个人根据我的需求,通过网络咨源整理的结果。不一定成熟和完美,但都亲自用过。如果大家都什么更好的解决方案。可以跟在后面,大家共享一下,以求共同进步。谢谢。