原理
用小偷程式的 優點有:無須維護網站,因為小偷程式中的數據來自其他網站,它將隨著該網站的更新而更新;可以節省伺服器資源,一般小偷程式就幾個檔案,所有網頁內容都是來自其他網站。 缺點有:不穩定,如果目標網站出錯,程式也會出錯,而且,如果目標網站進行升級維護,那么小偷程式也要進行相應修改;速度,因為是遠程調用,速度和在本地伺服器上讀取數據比起來,肯定要慢一些。
實例
實例一
下面就XMLHTTP在ASP中的套用做個簡單說明:
<%
'常用函式
'1、輸入url目標網頁地址,返回值getHTTPPage是目標網頁的html代碼
Function getHTTPPage(url)
dim Http
set Http=server.createobject("MSXML2.XMLHTTP")
Http.open "GET",url,false
Http.send()
if Http.readystate<>4 then
exit function
end if
getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
set http=nothing
if err.number<>0 then err.Clear
end function
'2、轉換亂瑪,直接用xmlhttp調用有中文字元的網頁得到的將是亂瑪,可以通過adodb.stream組件進行轉換
Function BytesToBstr(body,Cset)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
'下面試著調用http://www-3doing-com/earticle/的html內容
Dim Url,Html
Url="http://www-3doing-com/earticle/"
Html = getHTTPPage(Url)
Response.write Html
%>
實例二
新浪網站上的天氣程式
代碼如下:
<%
On Error Resume Next
Server.ScriptTimeOut=9999999
Function getHTTPPage(Path)
t = GetBody(Path)
getHTTPPage=BytesToBstr(t,"GB2312")
End function
首先,進行小偷程式的一些初始化設定,以上代碼的作用分別是忽略掉所有非致命性錯誤,把小偷程式的運行逾時時間設定得很長(這樣不會出現運行逾時的錯誤),轉換原來默認的UTF-8編碼轉換成GB2312編碼,否則直接用XMLHTTP組件調用有中文字元的網頁得到的將是亂碼。
Function GetBody(url)
on error resume next
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", url, False, "", ""
.Send
GetBody = .ResponseBody
End With
Set Retrieval = Nothing
End Function
然後調用XMLHTTP組件創建一個對象並進行初始化設定。
Function BytesToBstr(body,Cset)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
Function Newstring(wstr,strng)
Newstring=Instr(lcase(wstr),lcase(strng))
if Newstring<=0 then Newstring=Len(wstr)
End Function
處理抓取回來的數據需要調用adodb.stream組件並進行初始化設定
以下即為頁面顯示部分
<%
Dim wstr,str,url,start,over,city
’定義一些需要使用到的變數
city = Request.QueryString("id")
’程式傳回的ID變數(即用戶選擇的城市)賦給id
url="http://appnews-qq-com/cgi-bin/news_qq_search?city="&city&""
這裡設定需要抓取的頁面地址,當然你也可以直接指定某個地址而不使用變數
wstr=getHTTPPage(url)
獲取指定頁面的全部數據
start=Newstring(wstr," <html>")
這裡設定需要處理的數據的頭部,這個變數應視不同情況而設定,具體內容可以通過查看需要抓取的頁面的原始碼來確定。因為在這個程式里我們需要抓取整個頁面,所以設定為頁面全部抓取。注意,設定的內容必須是頁面內容唯一的,不可以重複。
over=Newstring(wstr," </HTML>")
和start相對應的就是需要處理的數據的尾部,同樣的,設定的內容必須是頁面中唯一的。
body=mid(wstr,start,over-start)
’設定顯示頁面的範圍
下面就是動用乾坤挪移+++的時候了,通過replace可以用一些字元替換掉數據中指定的字元。
body = replace(body,"skin1","新浪天氣預報 - 麥小偷網路")
body = replace(body,"http://appnews-qq-com/cgi-bin/news_qq_search?city","tianqi.asp?id")
本程式中已經完成了替換的工作,如果有其他需要的話可以繼續進行類似的替換操作。
response.write body
%>
替換完需要修改的內容後,就可以把修改的內容顯示在頁面上了。至此程式結束