网页原始码 ,下载资料
方法一:webbrowser的outhtml法
利用webbrowser打开网页,然后通过outhtml输出源码,再加以分析利用。
方法二:WebClient的Downloaddata法
利用webclient下载源码,再加以分析利用。
方法三:XMLHTTP及流对象法
利用MSXML2.XMLHTTP与adodb.stream获取源码,再加以分析利用。
经过多次的测试,获得源码速度的排序是:
方法三 > 方法一 > 方法二
也就是说,用XMLHTTP的方法是获得网页源码最快的方式。方法二所用时间是方法三的三倍,是方法一的二倍
下面我把几个方法的主要过程(函数)列出来,大家可以参考指正
XMLHTTP及流对象法的基本函数
Function GetPage(ByVal url)
Dim Retrieval
Retrieval = CreateObject("MSXML2.XMLHTTP")
With Retrieval
.Open("Get", url, False) ', "", ""
.Send()
GetPage = BytesToBstr(.ResponseBody)
End With
Retrieval = Nothing
End Function
Function BytesToBstr(ByVal body)
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 = "utf-8" '这里是设定编码的
BytesToBstr = objstream.ReadText
objstream.Close()
objstream = Nothing
End Function
WebClient的Downloaddata法的基本函数
Function gethtml(ByVal u As String, ByVal bm As String) As String
Dim Doc As New WebClient
Dim T As String = ""
Try
If bm = "utf-8" Then
T = System.Text.Encoding.UTF8.GetString(Doc.DownloadData(u))
ElseIf bm = "gb2312" Then
T = System.Text.Encoding.Default.GetString(Doc.DownloadData(u))
End If
Return T
Catch ex As Exception
Return ""
End Try
End Function
webbrowser的outhtml法的基本函数
利用WebBrowser的DocumentCompleted,获取webBrowser1.Document.Body.OuterHtml
=================================
VB.net保存远程文件到本地并用进度条进行显示的方法
首先在form里添加一个ProgressBar,命名为prg1
然后指定要下载的文件路径比如
dim remote as string ="http://www.abc.com/aa.exe" '远程文件
dim local as string ="bb.exe" '本地文件
然后进行调用:
DownloadFile(remote, local,Me.prg1)
主函数:
Public Shared Sub DownloadFile(ByVal URL As String, ByVal Filename As String, ByVal Prog As ProgressBar)
Dim Myrq As HttpWebRequest = HttpWebRequest.Create(URL)
Dim myrp As HttpWebResponse = Myrq.GetResponse
Dim totalBytes As Long = myrp.ContentLength
Prog.Maximum = totalBytes
Dim st As Stream = myrp.GetResponseStream
Dim so As Stream = New FileStream(Filename, FileMode.Create)
Dim totalDownloadedByte As Long = 0
Dim by(1024) As Byte
Dim osize As Integer = st.Read(by, 0, by.Length)
While osize > 0
totalDownloadedByte = osize + totalDownloadedByte
System.Windows.Forms.Application.DoEvents()
so.Write(by, 0, osize)
Prog.Value = totalDownloadedByte
osize = st.Read(by, 0, by.LongLength)
End While
so.Close()
st.Close()
End Sub