小偷&小偷入庫(kù)&采集入庫(kù)
更新時(shí)間:2006年07月21日 00:00:00 作者:
XMLHTTP應(yīng)用參考
一、使用步驟:
1、創(chuàng)建XMLHTTP對(duì)象 //需MSXML4.0支持
2、打開與服務(wù)端的連接,同時(shí)定義指令發(fā)送方式,服務(wù)網(wǎng)頁(yè)(URL)和請(qǐng)求權(quán)限等。客戶端通過Open命令打開與服務(wù)端的服務(wù)網(wǎng)頁(yè)的連接。與普通HTTP指令傳送一樣,可以用"GET"方法或"POST"方法指向服務(wù)端的服務(wù)網(wǎng)頁(yè)。
3、發(fā)送指令。
4、等待并接收服務(wù)端返回的處理結(jié)果。
5、釋放XMLHTTP對(duì)象
二、XMLHTTP方法:
1、XMLHTTP對(duì)象
備注:客戶機(jī)可以使用XMLHTTP對(duì)象發(fā)送任意的HTTP請(qǐng)求,接受HTTP應(yīng)答,還可以對(duì)應(yīng)答的XML文檔進(jìn)行解析。
Open方法:初始化一個(gè)Msxml2.XMLHTTP請(qǐng)求,指定HTTP請(qǐng)求方式、URL以及鑒定信息。
Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
bstrMethod: 數(shù)據(jù)傳送方式,即GET或POST。
bstrUrl: 服務(wù)網(wǎng)頁(yè)的URL。
varAsync: 是否同步執(zhí)行。缺省為True,即同步執(zhí)行,但只能在DOM中實(shí)施同步執(zhí)行。用中一般將其置為False,即異步執(zhí)行。
bstrUser: 用戶名,可省略。
bstrPassword:用戶口令,可省略。
Send方法:發(fā)送HTTP請(qǐng)求到服務(wù)器,返回應(yīng)答。
語法:
oXMLHttpRequest.send(varBody)
說明:此方法是否同步取決于Open方法的varAsync參數(shù)。如果設(shè)為True則為同步,調(diào)用立刻返回,如果設(shè)為False調(diào)用直到整個(gè)應(yīng)答被接收了才返回。
setRequestHeader( bstrHeader, bstrvalue )
bstrHeader:HTTP 頭(header)
bstrvalue: HTTP 頭(header)的值
如果Open方法定義為POST,可以定義表單方式上傳:
xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded")
三、XMLHTTP屬性:
onreadystatechange:在同步執(zhí)行方式下獲得返回結(jié)果的事件句柄。只能在DOM中調(diào)用。
responseBody: 結(jié)果返回為無符號(hào)整數(shù)數(shù)組。
responseStream: 結(jié)果返回為IStream流。
responseText : 結(jié)果返回為字符串。
responseXML: 結(jié)果返回為XML格式數(shù)據(jù)。
四、示例:
< script language="javascript" >
function getDatal(url){
var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.4.0";//創(chuàng)建XMLHTTPRequest對(duì)象,需MSXML4.0支持 ["MSXML2.XMLHTTP.4.0","MSXML2.DOMDocument.4.0"]
xmlhttp.open("GET",url,false,"",""; //使用HTTP GET初始化HTTP請(qǐng)求
xmlhttp.send(""; //發(fā)送HTTP請(qǐng)求并獲取HTTP響應(yīng)
return xmlhttp.responseXML; //獲取XML文檔
}
< /script >
現(xiàn)在網(wǎng)上流行的小偷程序比較多,有新聞?lì)愋⊥?,音樂小偷,下載小偷,那么它們是如何做的呢,下面我來做個(gè)簡(jiǎn)單介紹,希望對(duì)各位站長(zhǎng)有所幫助。
(一)原理
小偷程序?qū)嶋H上是通過了XML中的XMLHTTP組件調(diào)用其它網(wǎng)站上的網(wǎng)頁(yè)。比如新聞小偷程序,很多都是調(diào)用了sina的新聞網(wǎng)頁(yè),并且對(duì)其中的html進(jìn)行了一些替換,同時(shí)對(duì)廣告也進(jìn)行了過濾。用小偷程序的優(yōu)點(diǎn)有:無須維護(hù)網(wǎng)站,因?yàn)樾⊥党绦蛑械臄?shù)據(jù)來自其他網(wǎng)站,它將隨著該網(wǎng)站的更新而更新;可以節(jié)省服務(wù)器資源,一般小偷程序就幾個(gè)文件,所有網(wǎng)頁(yè)內(nèi)容都是來自其他網(wǎng)站。缺點(diǎn)有:不穩(wěn)定,如果目標(biāo)網(wǎng)站出錯(cuò),程序也會(huì)出錯(cuò),而且,如果目標(biāo)網(wǎng)站進(jìn)行升級(jí)維護(hù),那么小偷程序也要進(jìn)行相應(yīng)修改;速度,因?yàn)槭沁h(yuǎn)程調(diào)用,速度和在本地服務(wù)器上讀取數(shù)據(jù)比起來,肯定要慢一些。
(二)事例
下面就XMLHTTP在ASP中的應(yīng)用做個(gè)簡(jiǎn)單說明
代碼: <%
'常用函數(shù)
'1、輸入url目標(biāo)網(wǎng)頁(yè)地址,返回值getHTTPPage是目標(biāo)網(wǎng)頁(yè)的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、轉(zhuǎn)換亂瑪,直接用xmlhttp調(diào)用有中文字符的網(wǎng)頁(yè)得到的將是亂瑪,可以通過adodb.stream組件進(jìn)行轉(zhuǎn)換
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
'下面試著調(diào)用http://wmjie.51.net/swords的html內(nèi)容
Dim Url,Html
Url="http://wmjie.51.net/swords/"
Html = getHTTPPage(Url)
Response.write Html
%>
------------------------------------------------------
代碼:
'代碼]用XMLHTTP讀取遠(yuǎn)程文件
<%
Response.Buffer = True
Dim objXMLHTTP, xml
Set xml = Server.CreateObject("Microsoft.XMLHTTP"
xml.Open "GET", "http://wmjie.51.net/swords/diary.rar", False
xml.Send
' Add a header to give it a file name:
Response.AddHeader "Content-Disposition", _
"attachment;filename=mitchell-pres.zip"
' Specify the content type to tell the browser what to do:
Response.ContentType = "application/zip"
' Binarywrite the bytes to the browser
Response.BinaryWrite xml.responseBody
Set xml = Nothing
%>
-------------------------------------
如何寫ASP入庫(kù)小偷程序
入庫(kù)小偷的原理也很簡(jiǎn)單:就是用XMLHTTP遠(yuǎn)程讀取網(wǎng)頁(yè)的內(nèi)容,然后根據(jù)需要,對(duì)讀到的內(nèi)容進(jìn)行加工(過濾,替換,分類),最后得到自己需要的數(shù)據(jù),加入到數(shù)據(jù)庫(kù)中。
首先:我們先用XMLHTTP讀取遠(yuǎn)程網(wǎng)頁(yè)(我的另一片文章中有介紹)。
其次:對(duì)內(nèi)容進(jìn)行過濾,這個(gè)是比較關(guān)鍵的步驟,比如說,我要從遠(yuǎn)程網(wǎng)頁(yè)上提取出所有url連接,我應(yīng)該怎么做呢?
代碼:
‘這里用的是正則式
Set objRegExp = New Regexp '建立對(duì)象
objRegExp.IgnoreCase = True '大小寫忽略
objRegExp.Global = True '全局為真
objRegExp.Pattern = "http://.+?" '匹配字段
set mm=objRegExp.Execute(str) '執(zhí)行查找,str為輸入?yún)?shù)
For Each Match in mm '進(jìn)入循環(huán)
Response.write(Match.Value) '輸出url地址
next
然后,我們需要根據(jù)需要做一些替換功能,把不必要的數(shù)據(jù)替換掉,這個(gè)比較簡(jiǎn)單,用Replace函數(shù)即可。
最后,進(jìn)行數(shù)據(jù)庫(kù)操作
-------------------------------
一個(gè)例子
代碼:
<%
On Error Resume Next
Server.ScriptTimeOut=9999999
Function getHTTPPage(Path)
t = GetBody(Path)
getHTTPPage=BytesToBstr(t,"GB2312"
End function
'首先,進(jìn)行小偷程序的一些初始化設(shè)置,以上代碼的作用分別是忽略掉所有非致命性錯(cuò)誤,把小偷程序的運(yùn)行超時(shí)時(shí)間設(shè)置得很長(zhǎng)(這樣不會(huì)出現(xiàn)運(yùn)行超時(shí)的錯(cuò)誤),轉(zhuǎn)換原來默認(rèn)的UTF-8編碼轉(zhuǎn)換成GB2312編碼,否則直接用XMLHTTP組件調(diào)用有中文字符的網(wǎng)頁(yè)得到的將是亂碼。
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
'然后調(diào)用XMLHTTP組件創(chuàng)建一個(gè)對(duì)象并進(jìn)行初始化設(shè)置。
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
'處理抓取回來的數(shù)據(jù)需要調(diào)用adodb.stream組件并進(jìn)行初始化設(shè)置。%>
'以下即為頁(yè)面顯示部分
<%
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&""
'這里設(shè)置需要抓取的頁(yè)面地址,當(dāng)然你也可以直接指定某個(gè)地址而不使用變量
wstr=getHTTPPage(url)
'獲取指定頁(yè)面的全部數(shù)據(jù)
start=Newstring(wstr," <html>")
'這里設(shè)置需要處理的數(shù)據(jù)的頭部,這個(gè)變量應(yīng)視不同情況而設(shè)置,具體內(nèi)容可以通過查看需要抓取的頁(yè)面的源代碼來確定。因?yàn)樵谶@個(gè)程序里我們需要抓取整個(gè)頁(yè)面,所以設(shè)置為頁(yè)面全部抓取。注意,設(shè)置的內(nèi)容必須是頁(yè)面內(nèi)容唯一的,不可以重復(fù)。
over=Newstring(wstr," </HTML>")
'和start相對(duì)應(yīng)的就是需要處理的數(shù)據(jù)的尾部,同樣的,設(shè)置的內(nèi)容必須是頁(yè)面中唯一的。
body=mid(wstr,start,over-start)
'設(shè)置顯示頁(yè)面的范圍
'下面就是動(dòng)用乾坤挪移***的時(shí)候了,通過replace可以用一些字符替換掉數(shù)據(jù)中指定的字符。
body = replace(body,"skin1","天氣預(yù)報(bào) - 斯克網(wǎng)絡(luò)")
body = replace(body,"http://appnews.qq.com/cgi-bin/news_qq_search?city","tianqi.asp?id")
'本程序中已經(jīng)完成了替換的工作,如果有其他需要的話可以繼續(xù)進(jìn)行類似的替換操作。
response.write body
引用: 遠(yuǎn)程獲取內(nèi)容,并將內(nèi)容存在本地電腦上,包括任何文件
<%
'----------遠(yuǎn)程獲取內(nèi)容,并將內(nèi)容存在本地電腦上,包括任何文件!----------
'On Error Resume Next
'Set the content type to the specific type that you are sending.
'Response.ContentType = "IMAGE/JPEG"
'-------------------------------定義輸出格式-----------------------------
Path=request.querystring("p")
sPath = Path
if left(lcase(path),7) <> "http://"; then
'-------------如果前面沒有http就是本地文件,交給LocalFile處理------------
LocalFile(path)
else
'--------------------否則為遠(yuǎn)程文件,交給RemoteFile處理------------------
RemoteFile(Path)
end if
'Response.Write err.Description
sub LocalFile(Path)
'-------------------如果為本地文件則簡(jiǎn)單的跳轉(zhuǎn)到該頁(yè)面-------------------
Response.Redirect Path
End Sub
Sub RemoteFile(sPath)
'-------------------------處理遠(yuǎn)程文件函數(shù)------------------------------
FileName = GetFileName(sPath)
'-------------GetFileName為把地址轉(zhuǎn)換為合格的文件名過程-------------
FileName = Server.MapPath("/UploadFile/Cache/" & FileName)
Set objFso = Server.CreateObject("Scripting.FileSystemObject")
'Response.Write fileName
if objFso.FileExists(FileName) Then
'--------------檢查文件是否是已經(jīng)訪問過,如是,則簡(jiǎn)單跳轉(zhuǎn)------------
Response.Redirect "/uploadfile/cache/" & GetFileName(path)
Else
'----------------否則的話就先用GetBody函數(shù)讀取----------------------
'Response.Write Path
t = GetBody(Path)
'-----------------用二進(jìn)制方法寫到瀏覽器上--------------------------
Response.BinaryWrite t
Response.Flush
'-----------------輸出緩沖------------------------------------------
SaveFile t,GetFileName(path)
'------------------將文件內(nèi)容緩存到本地路徑,以待下次訪問-----------
End if
Set objFso = Nothing
End Sub
Function GetBody(url)
'-----------------------本函數(shù)為遠(yuǎn)程獲取內(nèi)容的函數(shù)---------------------
'on error resume next
'Response.Write url
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
'----------------------建立XMLHTTP對(duì)象-----------------------------
With Retrieval
.Open "Get", url, False, "", ""
'------------------用Get,異步的方法發(fā)送-----------------------
.Send
'GetBody = .ResponseText
GetBody = .ResponseBody
'------------------函數(shù)返回獲取的內(nèi)容--------------------------
End With
Set Retrieval = Nothing
'response.Write err.Description
End Function
Function GetFileName(str)
'-------------------------本函數(shù)為合格化的文件名函數(shù)-------------------
str = Replace(lcase(str),"http://";,"")
str = Replace(lcase(str),"http://","/")
str = Replace(str,"/","")
str = replace(str,vbcrlf,"")
GetFileName = str
End Function
sub SaveFile(str,fName)
'-------------------------本函數(shù)為將流內(nèi)容存盤的函數(shù)-------------------
'on error resume next
Set objStream = Server.CreateObject("ADODB.Stream")
'--------------建立ADODB.Stream對(duì)象,必須要ADO 2.5以上版本---------
objStream.Type = adTypeBinary
'-------------以二進(jìn)制模式打開-------------------------------------
objStream.Open
objstream.write str
'--------------------將字符串內(nèi)容寫入緩沖--------------------------
'response.Write fname
objstream.SaveToFile "c:\inetpub\myweb\uploadfile\cache\" & fName,adSaveCreateOverWrite
'--------------------將緩沖的內(nèi)容寫入文件--------------------------
'response.BinaryWrite objstream.Read
objstream.Close()
set objstream = nothing
'-----------------------關(guān)閉對(duì)象,釋放資源-------------------------
'response.Write err.Description
End sub
%>
一、使用步驟:
1、創(chuàng)建XMLHTTP對(duì)象 //需MSXML4.0支持
2、打開與服務(wù)端的連接,同時(shí)定義指令發(fā)送方式,服務(wù)網(wǎng)頁(yè)(URL)和請(qǐng)求權(quán)限等。客戶端通過Open命令打開與服務(wù)端的服務(wù)網(wǎng)頁(yè)的連接。與普通HTTP指令傳送一樣,可以用"GET"方法或"POST"方法指向服務(wù)端的服務(wù)網(wǎng)頁(yè)。
3、發(fā)送指令。
4、等待并接收服務(wù)端返回的處理結(jié)果。
5、釋放XMLHTTP對(duì)象
二、XMLHTTP方法:
1、XMLHTTP對(duì)象
備注:客戶機(jī)可以使用XMLHTTP對(duì)象發(fā)送任意的HTTP請(qǐng)求,接受HTTP應(yīng)答,還可以對(duì)應(yīng)答的XML文檔進(jìn)行解析。
Open方法:初始化一個(gè)Msxml2.XMLHTTP請(qǐng)求,指定HTTP請(qǐng)求方式、URL以及鑒定信息。
Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
bstrMethod: 數(shù)據(jù)傳送方式,即GET或POST。
bstrUrl: 服務(wù)網(wǎng)頁(yè)的URL。
varAsync: 是否同步執(zhí)行。缺省為True,即同步執(zhí)行,但只能在DOM中實(shí)施同步執(zhí)行。用中一般將其置為False,即異步執(zhí)行。
bstrUser: 用戶名,可省略。
bstrPassword:用戶口令,可省略。
Send方法:發(fā)送HTTP請(qǐng)求到服務(wù)器,返回應(yīng)答。
語法:
oXMLHttpRequest.send(varBody)
說明:此方法是否同步取決于Open方法的varAsync參數(shù)。如果設(shè)為True則為同步,調(diào)用立刻返回,如果設(shè)為False調(diào)用直到整個(gè)應(yīng)答被接收了才返回。
setRequestHeader( bstrHeader, bstrvalue )
bstrHeader:HTTP 頭(header)
bstrvalue: HTTP 頭(header)的值
如果Open方法定義為POST,可以定義表單方式上傳:
xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded")
三、XMLHTTP屬性:
onreadystatechange:在同步執(zhí)行方式下獲得返回結(jié)果的事件句柄。只能在DOM中調(diào)用。
responseBody: 結(jié)果返回為無符號(hào)整數(shù)數(shù)組。
responseStream: 結(jié)果返回為IStream流。
responseText : 結(jié)果返回為字符串。
responseXML: 結(jié)果返回為XML格式數(shù)據(jù)。
四、示例:
< script language="javascript" >
function getDatal(url){
var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.4.0";//創(chuàng)建XMLHTTPRequest對(duì)象,需MSXML4.0支持 ["MSXML2.XMLHTTP.4.0","MSXML2.DOMDocument.4.0"]
xmlhttp.open("GET",url,false,"",""; //使用HTTP GET初始化HTTP請(qǐng)求
xmlhttp.send(""; //發(fā)送HTTP請(qǐng)求并獲取HTTP響應(yīng)
return xmlhttp.responseXML; //獲取XML文檔
}
< /script >
現(xiàn)在網(wǎng)上流行的小偷程序比較多,有新聞?lì)愋⊥?,音樂小偷,下載小偷,那么它們是如何做的呢,下面我來做個(gè)簡(jiǎn)單介紹,希望對(duì)各位站長(zhǎng)有所幫助。
(一)原理
小偷程序?qū)嶋H上是通過了XML中的XMLHTTP組件調(diào)用其它網(wǎng)站上的網(wǎng)頁(yè)。比如新聞小偷程序,很多都是調(diào)用了sina的新聞網(wǎng)頁(yè),并且對(duì)其中的html進(jìn)行了一些替換,同時(shí)對(duì)廣告也進(jìn)行了過濾。用小偷程序的優(yōu)點(diǎn)有:無須維護(hù)網(wǎng)站,因?yàn)樾⊥党绦蛑械臄?shù)據(jù)來自其他網(wǎng)站,它將隨著該網(wǎng)站的更新而更新;可以節(jié)省服務(wù)器資源,一般小偷程序就幾個(gè)文件,所有網(wǎng)頁(yè)內(nèi)容都是來自其他網(wǎng)站。缺點(diǎn)有:不穩(wěn)定,如果目標(biāo)網(wǎng)站出錯(cuò),程序也會(huì)出錯(cuò),而且,如果目標(biāo)網(wǎng)站進(jìn)行升級(jí)維護(hù),那么小偷程序也要進(jìn)行相應(yīng)修改;速度,因?yàn)槭沁h(yuǎn)程調(diào)用,速度和在本地服務(wù)器上讀取數(shù)據(jù)比起來,肯定要慢一些。
(二)事例
下面就XMLHTTP在ASP中的應(yīng)用做個(gè)簡(jiǎn)單說明
代碼: <%
'常用函數(shù)
'1、輸入url目標(biāo)網(wǎng)頁(yè)地址,返回值getHTTPPage是目標(biāo)網(wǎng)頁(yè)的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、轉(zhuǎn)換亂瑪,直接用xmlhttp調(diào)用有中文字符的網(wǎng)頁(yè)得到的將是亂瑪,可以通過adodb.stream組件進(jìn)行轉(zhuǎn)換
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
'下面試著調(diào)用http://wmjie.51.net/swords的html內(nèi)容
Dim Url,Html
Url="http://wmjie.51.net/swords/"
Html = getHTTPPage(Url)
Response.write Html
%>
------------------------------------------------------
代碼:
'代碼]用XMLHTTP讀取遠(yuǎn)程文件
<%
Response.Buffer = True
Dim objXMLHTTP, xml
Set xml = Server.CreateObject("Microsoft.XMLHTTP"
xml.Open "GET", "http://wmjie.51.net/swords/diary.rar", False
xml.Send
' Add a header to give it a file name:
Response.AddHeader "Content-Disposition", _
"attachment;filename=mitchell-pres.zip"
' Specify the content type to tell the browser what to do:
Response.ContentType = "application/zip"
' Binarywrite the bytes to the browser
Response.BinaryWrite xml.responseBody
Set xml = Nothing
%>
-------------------------------------
如何寫ASP入庫(kù)小偷程序
入庫(kù)小偷的原理也很簡(jiǎn)單:就是用XMLHTTP遠(yuǎn)程讀取網(wǎng)頁(yè)的內(nèi)容,然后根據(jù)需要,對(duì)讀到的內(nèi)容進(jìn)行加工(過濾,替換,分類),最后得到自己需要的數(shù)據(jù),加入到數(shù)據(jù)庫(kù)中。
首先:我們先用XMLHTTP讀取遠(yuǎn)程網(wǎng)頁(yè)(我的另一片文章中有介紹)。
其次:對(duì)內(nèi)容進(jìn)行過濾,這個(gè)是比較關(guān)鍵的步驟,比如說,我要從遠(yuǎn)程網(wǎng)頁(yè)上提取出所有url連接,我應(yīng)該怎么做呢?
代碼:
‘這里用的是正則式
Set objRegExp = New Regexp '建立對(duì)象
objRegExp.IgnoreCase = True '大小寫忽略
objRegExp.Global = True '全局為真
objRegExp.Pattern = "http://.+?" '匹配字段
set mm=objRegExp.Execute(str) '執(zhí)行查找,str為輸入?yún)?shù)
For Each Match in mm '進(jìn)入循環(huán)
Response.write(Match.Value) '輸出url地址
next
然后,我們需要根據(jù)需要做一些替換功能,把不必要的數(shù)據(jù)替換掉,這個(gè)比較簡(jiǎn)單,用Replace函數(shù)即可。
最后,進(jìn)行數(shù)據(jù)庫(kù)操作
-------------------------------
一個(gè)例子
代碼:
<%
On Error Resume Next
Server.ScriptTimeOut=9999999
Function getHTTPPage(Path)
t = GetBody(Path)
getHTTPPage=BytesToBstr(t,"GB2312"
End function
'首先,進(jìn)行小偷程序的一些初始化設(shè)置,以上代碼的作用分別是忽略掉所有非致命性錯(cuò)誤,把小偷程序的運(yùn)行超時(shí)時(shí)間設(shè)置得很長(zhǎng)(這樣不會(huì)出現(xiàn)運(yùn)行超時(shí)的錯(cuò)誤),轉(zhuǎn)換原來默認(rèn)的UTF-8編碼轉(zhuǎn)換成GB2312編碼,否則直接用XMLHTTP組件調(diào)用有中文字符的網(wǎng)頁(yè)得到的將是亂碼。
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
'然后調(diào)用XMLHTTP組件創(chuàng)建一個(gè)對(duì)象并進(jìn)行初始化設(shè)置。
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
'處理抓取回來的數(shù)據(jù)需要調(diào)用adodb.stream組件并進(jìn)行初始化設(shè)置。%>
'以下即為頁(yè)面顯示部分
<%
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&""
'這里設(shè)置需要抓取的頁(yè)面地址,當(dāng)然你也可以直接指定某個(gè)地址而不使用變量
wstr=getHTTPPage(url)
'獲取指定頁(yè)面的全部數(shù)據(jù)
start=Newstring(wstr," <html>")
'這里設(shè)置需要處理的數(shù)據(jù)的頭部,這個(gè)變量應(yīng)視不同情況而設(shè)置,具體內(nèi)容可以通過查看需要抓取的頁(yè)面的源代碼來確定。因?yàn)樵谶@個(gè)程序里我們需要抓取整個(gè)頁(yè)面,所以設(shè)置為頁(yè)面全部抓取。注意,設(shè)置的內(nèi)容必須是頁(yè)面內(nèi)容唯一的,不可以重復(fù)。
over=Newstring(wstr," </HTML>")
'和start相對(duì)應(yīng)的就是需要處理的數(shù)據(jù)的尾部,同樣的,設(shè)置的內(nèi)容必須是頁(yè)面中唯一的。
body=mid(wstr,start,over-start)
'設(shè)置顯示頁(yè)面的范圍
'下面就是動(dòng)用乾坤挪移***的時(shí)候了,通過replace可以用一些字符替換掉數(shù)據(jù)中指定的字符。
body = replace(body,"skin1","天氣預(yù)報(bào) - 斯克網(wǎng)絡(luò)")
body = replace(body,"http://appnews.qq.com/cgi-bin/news_qq_search?city","tianqi.asp?id")
'本程序中已經(jīng)完成了替換的工作,如果有其他需要的話可以繼續(xù)進(jìn)行類似的替換操作。
response.write body
引用: 遠(yuǎn)程獲取內(nèi)容,并將內(nèi)容存在本地電腦上,包括任何文件
<%
'----------遠(yuǎn)程獲取內(nèi)容,并將內(nèi)容存在本地電腦上,包括任何文件!----------
'On Error Resume Next
'Set the content type to the specific type that you are sending.
'Response.ContentType = "IMAGE/JPEG"
'-------------------------------定義輸出格式-----------------------------
Path=request.querystring("p")
sPath = Path
if left(lcase(path),7) <> "http://"; then
'-------------如果前面沒有http就是本地文件,交給LocalFile處理------------
LocalFile(path)
else
'--------------------否則為遠(yuǎn)程文件,交給RemoteFile處理------------------
RemoteFile(Path)
end if
'Response.Write err.Description
sub LocalFile(Path)
'-------------------如果為本地文件則簡(jiǎn)單的跳轉(zhuǎn)到該頁(yè)面-------------------
Response.Redirect Path
End Sub
Sub RemoteFile(sPath)
'-------------------------處理遠(yuǎn)程文件函數(shù)------------------------------
FileName = GetFileName(sPath)
'-------------GetFileName為把地址轉(zhuǎn)換為合格的文件名過程-------------
FileName = Server.MapPath("/UploadFile/Cache/" & FileName)
Set objFso = Server.CreateObject("Scripting.FileSystemObject")
'Response.Write fileName
if objFso.FileExists(FileName) Then
'--------------檢查文件是否是已經(jīng)訪問過,如是,則簡(jiǎn)單跳轉(zhuǎn)------------
Response.Redirect "/uploadfile/cache/" & GetFileName(path)
Else
'----------------否則的話就先用GetBody函數(shù)讀取----------------------
'Response.Write Path
t = GetBody(Path)
'-----------------用二進(jìn)制方法寫到瀏覽器上--------------------------
Response.BinaryWrite t
Response.Flush
'-----------------輸出緩沖------------------------------------------
SaveFile t,GetFileName(path)
'------------------將文件內(nèi)容緩存到本地路徑,以待下次訪問-----------
End if
Set objFso = Nothing
End Sub
Function GetBody(url)
'-----------------------本函數(shù)為遠(yuǎn)程獲取內(nèi)容的函數(shù)---------------------
'on error resume next
'Response.Write url
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
'----------------------建立XMLHTTP對(duì)象-----------------------------
With Retrieval
.Open "Get", url, False, "", ""
'------------------用Get,異步的方法發(fā)送-----------------------
.Send
'GetBody = .ResponseText
GetBody = .ResponseBody
'------------------函數(shù)返回獲取的內(nèi)容--------------------------
End With
Set Retrieval = Nothing
'response.Write err.Description
End Function
Function GetFileName(str)
'-------------------------本函數(shù)為合格化的文件名函數(shù)-------------------
str = Replace(lcase(str),"http://";,"")
str = Replace(lcase(str),"http://","/")
str = Replace(str,"/","")
str = replace(str,vbcrlf,"")
GetFileName = str
End Function
sub SaveFile(str,fName)
'-------------------------本函數(shù)為將流內(nèi)容存盤的函數(shù)-------------------
'on error resume next
Set objStream = Server.CreateObject("ADODB.Stream")
'--------------建立ADODB.Stream對(duì)象,必須要ADO 2.5以上版本---------
objStream.Type = adTypeBinary
'-------------以二進(jìn)制模式打開-------------------------------------
objStream.Open
objstream.write str
'--------------------將字符串內(nèi)容寫入緩沖--------------------------
'response.Write fname
objstream.SaveToFile "c:\inetpub\myweb\uploadfile\cache\" & fName,adSaveCreateOverWrite
'--------------------將緩沖的內(nèi)容寫入文件--------------------------
'response.BinaryWrite objstream.Read
objstream.Close()
set objstream = nothing
'-----------------------關(guān)閉對(duì)象,釋放資源-------------------------
'response.Write err.Description
End sub
%>
相關(guān)文章
XMLHttp ASP遠(yuǎn)程獲取網(wǎng)頁(yè)內(nèi)容代碼
asp下利用xmlhttp獲取網(wǎng)頁(yè)內(nèi)容的方法這個(gè)方法一般比較通用的,然后通過字符截取網(wǎng)頁(yè)的內(nèi)容。2008-11-11網(wǎng)站生成靜態(tài)頁(yè)面攻略3:防采集策略
網(wǎng)站生成靜態(tài)頁(yè)面攻略3:防采集策略...2006-08-08