第1 頁利用Msxml2.ServerXMLHTTP抓取網頁內容第2 頁用ADODB.Stream將抓取內容寫入文件第3 頁具體的舉一個例子了解asp的人應該都知道asp是一種解釋執行的腳本程式語言,而腳本程式的執行效率往往都是很低的,如果站點的訪問量相對較高的話伺服器就會非常消耗資源,表現的結果就是站點訪問速度急速下降.解決的方法,除了優化程序提高執行效率,還有一個方法就是將網站內的訪問量大的頁面定時的生成靜態html文件,這樣可以非常有效的解決訪問速度問題,當然前提是你的伺服器速度也要不是很慢了,不然怎麼弄都是沒有效果的. 下面我介紹一種利用Msxml2.ServerXMLHTTP元件來抓取您所要生成靜態的網頁,然後再利用fso,或者ado來寫入文件的一種方法,需要注意的是本文範例全部採用utf -8編碼,如果改為gb2312需要做對應屬性的修改! 先給處下面的函數:
<!--'相關問題可至http://www.downcodes.com
Function GetURL(URL)
'下載主函數
const TimeInterval=60
'設定時間間隔
'如果下載時間很慢,就寫成120秒
'Response.LCID=2052
const lResolve=6
'解析網域逾時時間,秒
const lConnect=6
'連線站點超時時間,秒
const lSend=6
'發送資料請求超時時間,秒
const lReceive=40
'下載資料超時時間,秒
on error resume Next
Dim http
Set http = Server.CreateObject("Msxml2.ServerXMLHTTP")
http.setTimeouts lResolve*1000,lConnect*1000,lSend*1000,lReceive*1000
http.Open "GET",URL,False
http.Send
Select Case http.readyState
Case 0
GetURL="物件初始化失敗"
Err.Clear
set http=nothing
Exit Function
Case 1
GetURL="網域分析逾時/連線網站逾時"
Err.Clear
set http=nothing
Exit Function
Case 2
GetURL="發送資料請求超時,是不是伺服器出故障了"
Err.Clear
set http=nothing
Exit Function
Case 3
GetURL="資料下載逾時/等待回饋時間逾時"
Err.Clear
set http=nothing
Exit Function
Case 4
'下載成功
End Select
If http.status<>200 then
GetURL="下載失敗"&Err.description
Err.Clear
set http=nothing
Exit Function
END IF
If http.status="200" then
GetURL=http.ResponseText
'GetURL=SaveFile()
End If
set http=nothing
End Function
-->
主要功能是抓取位址參數的網頁檔案的內容使用方法varia=GetURL(" http://www.downcodes.com "),如果是本機測試位址可以寫成http://localhost/default.asp使用此函數要注意的是Response.LCID=2052屬性在windows server 2000下不被支援,不過問題不大隻要註解掉即可正常使用! 還有一些超時屬性可以根據需要自訂,但注意不要設定的時間太短,否則如果文件大或地址訪問速度較慢就容易抓取失敗! 這讓我們就可以利用此函數來抓取你想要生成的網頁文件內容了.將內容存入變量,等著寫入文件吧!
下面給出這個類別,用來將剛剛利用函數抓取的內容寫入相應文件,這樣就大功告成了! 直接生成你所要生成的網頁吧,非常方便而且不用修改原來的文件!
Class Htmlmaker
'相關問題請請參閱http://www.downcodes.com
'/*************************
'/ 屬性設定說明
'/ foldename "資料夾名稱"
'/ 如果不設定,將自動產生[年月日]時間格式的資料夾名稱
'/ Filename "檔案名稱"(含前後綴)
'/ 如果不設定,將自動產生[時分秒]時間格式的檔案名稱,後綴為.html
'/ Htmlstr "產生的程式碼內容"
'/*************************
Private HtmlFolder,HtmlFilename,HtmlContent
Public property let foldename(str)
HtmlFolder=str
End property
Public property let Filename(str)
HtmlFilename=str
End property
Public property let Htmlstr(str)
HtmlContent=str
End property
'/*************************
'/ 檔名轉換日期函數
'/*************************
Private Function Datename1(timestr)
dim s_year,s_month,s_day
s_year=year(timestr)
if len(s_year)=2 then s_year="20"&s_year
s_month=month(timestr)
if s_month<10 then s_month="0"&s_month
s_day=day(timestr)
if s_day<10 then s_day="0"&s_day
Datename1=s_year & s_month & s_day
End Function
Private Function Datename2(timestr)
dim s_hour,s_minute,s_ss
s_hour=hour(timestr)
if s_hour<10 then s_hour="0"&s_hour
s_minute=minute(timestr)
if s_minute<10 then s_minute="0"&s_minute
s_ss=second(timestr)
if s_ss<10 then s_ss="0"&s_ss
Datename2 = s_hour & s_minute & s_ss
End Function
'/*************************
'/ 初試化
'/*************************
Private Sub class_initialize()
HtmlFolder=Datename1(now)
HtmlFilename=Datename2(now)&".html"
HtmlC
End Sub
Private Sub class_terminate()
End Sub
'/*************************
'/ Html檔案生成
'/*************************
Public Sub Htmlmake()
' On Error Resume Next
dim filepath,fso,fout
filepath = HtmlFolder&"/"&HtmlFilename
Set fso = Server.CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(Server.MapPath(HtmlFolder)) Then
Else
fso.CreateFolder(Server.MapPath(HtmlFolder))
End If
' Set fout = fso.CreateTextFile(Server.MapPath(filepath),true)
' fout.WriteLine HtmlContent
' fout.close
dim objFSO,adTypeText,adSaveCreateOverWrite,Charsett,objAdoStream
Charsett = "utf-8"
set objAdoStream = Server.CreateObject("ADODB.Stream")
adTypeText = 2
adSaveCreateOverWrite = 2
objAdoStream.Type = adTypeText
objAdoStream.Open
objAdoStream.Charset = Charsett
objAdoStream.WriteText(HtmlContent)
objAdoStream.SaveToFile Server.MapPath(filepath),2
objAdoStream.Close
End Sub
'/*************************
'/ Html檔案刪除
'/*************************
Public Sub Htmldel()
dim filepath,fso
filepath = HtmlFolder&"/"&HtmlFilename
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.FileExists(Server.MapPath(filepath)) then
fso.DeleteFile(Server.mappath(filepath))
end if
Set fso = nothing
End Sub
End class
下面為了讓大家更好的學習給出具體的舉一個實例:
我們有一個網站地址是http://www.downcodes.com/
我們要將其首頁也就是default.asp生成靜態的htm文件
我們先建立個人檔案:makeindex.asp
<!--#include file="function_class.asp"-->
<%
dim indexhtmlstr
indexhtmlstr=GetURL(" http://www.downcodes.com/default.asp ")
dim indexfilename
indexfilename="index.htm"
dim actionstat
if len(indexhtmlstr) <200 then
acti&indexfilename&"文件時遇到"&indexhtmlstr&"錯誤"
else
dim myhtml
set myhtml= new Htmlmaker
myhtml.foldename = "../.."
myhtml.Filename = indexfilename
myhtml.Htmldel
myhtml.Htmlstr = indexhtmlstr
myhtml.Htmlmake
set myhtml=nothing
acti&indexfilename&"文件"
end if
response.write actionstat
%>
檔案function_class.asp的內容主要包括前面給的函數和產生檔案的類別就可以了!
運行makeindex.asp就可以產生htm檔了!