C/S中得到网页的原代码

 这里我介绍两种方法来得到网页原代码.一种是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

 

 

总结一下:

以上是个人根据我的需求,通过网络咨源整理的结果。不一定成熟和完美,但都亲自用过。如果大家都什么更好的解决方案。可以跟在后面,大家共享一下,以求共同进步。谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值