采集原理---采集技術(shù)篇---XMLHTTP
更新時(shí)間:2006年09月04日 00:00:00 作者:
最近一段時(shí)間,采集很熱門(mén),從新聞小偷,到音樂(lè)小偷,到新聞采集,F(xiàn)lash采集,都有他的蹤影,現(xiàn)在還有很多的人對(duì)采集都很感興趣,為了服務(wù)大家,我也正在寫(xiě)一套采集程序,名字為 心意采集程序 ,現(xiàn)在我講一下,采集用到的相關(guān)技術(shù)。
下面講到的也不是很高深的XMLHTTP技術(shù),我也是稍稍講一下,一個(gè)采集需要用到的幾塊內(nèi)容
如果你需要了解更多的問(wèn)題,請(qǐng)去www.google.com 搜索 XMLHTTP 技術(shù) 你將會(huì)得到更多的幫助,如果大家有什么疑問(wèn)的話,可以在論壇上回貼
下面只講到如何在網(wǎng)上得到數(shù)據(jù),并不涉及到數(shù)據(jù)處理
第一 XMLHTTP 技術(shù)
http://www.0579.info/study/exploitation/net/58685.htm
上面那個(gè)地址,那篇文章講的根本原理已經(jīng)很詳細(xì)了,但是我們一般采集的話,剛開(kāi)始不太需要了解太多。只要實(shí)用就可以了,等以后不夠用的時(shí)候,再去找相關(guān)文檔也來(lái)得急
首先,我們需要建立一個(gè)XMLHTTP對(duì)象
微軟發(fā)布的xmlhttp組件已經(jīng)有很多的版本了,我知道的就有以下幾種:
"MSXML2.ServerXMLHTTP.4.0"
"MSXML2.ServerXMLHTTP.3.0"
"MSXML2.ServerXMLHTTP"
"MSXML2.XMLHTTP.5.0"
"MSXML2.XMLHTTP.4.0"
"MSXML2.XMLHTTP.3.0"
"MSXML2.XMLHTTP"
"Microsoft.XMLHTTP
以上有這么多種組件,我們當(dāng)然是需要申請(qǐng)最高版本的對(duì)象嘍,那有什么辦法可以實(shí)現(xiàn)呢
下面我拿出一段代碼,大家可以看看,他是按最高版本申請(qǐng)XMLHTTP對(duì)象的
Dim ArrProgId,Prog,Flag,XmlHttpCom
ArrProgId = array("MSXML2.ServerXMLHTTP.4.0", "MSXML2.ServerXMLHTTP.3.0", "MSXML2.ServerXMLHTTP", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP","Microsoft.XMLHTTP")
For Each Prog In arrProgId
If (IsObjInstalled(Prog) = true) Then
XmlHttpCom = Prog
Exit For
End If
Next
'// <summary>
'// Rem 檢查組件是否支持 是返回 True 否返回 False
'// </summary>
Public Function IsObjInstalled(strClassString)
On Error Resume Next
'//設(shè)置初始化值
IsObjInstalled = False
Err = 0
'//測(cè)試代碼
Dim xTestObj
Set xTestObj = Server.createObject(strClassString)
If 0 = Err Then IsObjInstalled = True
'//清除所申請(qǐng)的對(duì)象
Set xTestObj = Nothing
Err = 0
End Function
上面那段代碼就是申請(qǐng)到當(dāng)前服務(wù)器支持的最高版本的XMLHTTP對(duì)象了
下面我們講一下采集功能函數(shù)
'GetFileText為采集功能函數(shù)
Public Function GetFileText(url)
on error resume next '有錯(cuò)誤時(shí)繼續(xù)執(zhí)行代碼
Dim http '定義變量
'Set http=Server.createobject(XmlHttpCom) '申請(qǐng)對(duì)象
Set http=Server.createobject("Microsoft.XMLHTTP") '保險(xiǎn)起見(jiàn),寫(xiě)出一個(gè)服務(wù)器一般都支持的版本
Http.open "GET",url,False '打開(kāi)對(duì)象 用GET方式 等待服務(wù)器響應(yīng)
Http.Send() '發(fā)送
If Http.readystate<>4 Then '如果服務(wù)器沒(méi)反應(yīng),則退出函數(shù)
Exit Function
End If
GetFileText=bytes2BSTR(Http.responseBody,"GB2312") '把得到的數(shù)據(jù)流二進(jìn)制文件 轉(zhuǎn)化成文本字符格式 (GB2312)
Set http=Nothing '刪除對(duì)象
If err.number<>0 Then err.Clear '如果有錯(cuò)誤,清除錯(cuò)誤
End Function
'// <summary>
'// 采用 ADODB.Stream 處理采集到的數(shù)據(jù),把二進(jìn)制的文件轉(zhuǎn)成文本字符
'// </summary>
Function Bytes2bStr(vin,cSet)
Dim BytesStream,StringReturn
Set BytesStream = Server.createObject("ADODB.Stream")
BytesStream.Type = 2
BytesStream.Open
BytesStream.WriteText vin
BytesStream.Position = 0
BytesStream.CharSet = cSet
BytesStream.Position = 2
StringReturn =BytesStream.ReadText
BytesStream.close
Set BytesStream = Nothing
Bytes2bStr = StringReturn
End Function
下面我定義一個(gè) 路徑變量 URL
URL = "http://ent.sina.com.cn/star/mainland/more.html";
上面是一個(gè)網(wǎng)址,如果我們想把上面這個(gè)地址采集下來(lái),并顯示出來(lái)的話,我們可以這樣操作
URL = "http://ent.sina.com.cn/star/mainland/more.html";
Response.Write GetFileText(URL)
這樣就可以采集到上面網(wǎng)址的內(nèi)容了
是不是很簡(jiǎn)單呢
那采集到數(shù)據(jù)之后應(yīng)該怎么操作呢
怎么區(qū)分?jǐn)?shù)據(jù),如果得到你想要的數(shù)據(jù),如果把得到的數(shù)據(jù)入庫(kù)呢
這是以后需要分析講解的問(wèn)題了 入庫(kù)要注意的地方,用正表達(dá)式處理數(shù)據(jù)
附上 上面代碼的源文件,大家可以下載下去,運(yùn)行起來(lái)試試,是不是真的能采集到數(shù)據(jù)庫(kù)
下面講到的也不是很高深的XMLHTTP技術(shù),我也是稍稍講一下,一個(gè)采集需要用到的幾塊內(nèi)容
如果你需要了解更多的問(wèn)題,請(qǐng)去www.google.com 搜索 XMLHTTP 技術(shù) 你將會(huì)得到更多的幫助,如果大家有什么疑問(wèn)的話,可以在論壇上回貼
下面只講到如何在網(wǎng)上得到數(shù)據(jù),并不涉及到數(shù)據(jù)處理
第一 XMLHTTP 技術(shù)
http://www.0579.info/study/exploitation/net/58685.htm
上面那個(gè)地址,那篇文章講的根本原理已經(jīng)很詳細(xì)了,但是我們一般采集的話,剛開(kāi)始不太需要了解太多。只要實(shí)用就可以了,等以后不夠用的時(shí)候,再去找相關(guān)文檔也來(lái)得急
首先,我們需要建立一個(gè)XMLHTTP對(duì)象
微軟發(fā)布的xmlhttp組件已經(jīng)有很多的版本了,我知道的就有以下幾種:
"MSXML2.ServerXMLHTTP.4.0"
"MSXML2.ServerXMLHTTP.3.0"
"MSXML2.ServerXMLHTTP"
"MSXML2.XMLHTTP.5.0"
"MSXML2.XMLHTTP.4.0"
"MSXML2.XMLHTTP.3.0"
"MSXML2.XMLHTTP"
"Microsoft.XMLHTTP
以上有這么多種組件,我們當(dāng)然是需要申請(qǐng)最高版本的對(duì)象嘍,那有什么辦法可以實(shí)現(xiàn)呢
下面我拿出一段代碼,大家可以看看,他是按最高版本申請(qǐng)XMLHTTP對(duì)象的
Dim ArrProgId,Prog,Flag,XmlHttpCom
ArrProgId = array("MSXML2.ServerXMLHTTP.4.0", "MSXML2.ServerXMLHTTP.3.0", "MSXML2.ServerXMLHTTP", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP","Microsoft.XMLHTTP")
For Each Prog In arrProgId
If (IsObjInstalled(Prog) = true) Then
XmlHttpCom = Prog
Exit For
End If
Next
'// <summary>
'// Rem 檢查組件是否支持 是返回 True 否返回 False
'// </summary>
Public Function IsObjInstalled(strClassString)
On Error Resume Next
'//設(shè)置初始化值
IsObjInstalled = False
Err = 0
'//測(cè)試代碼
Dim xTestObj
Set xTestObj = Server.createObject(strClassString)
If 0 = Err Then IsObjInstalled = True
'//清除所申請(qǐng)的對(duì)象
Set xTestObj = Nothing
Err = 0
End Function
上面那段代碼就是申請(qǐng)到當(dāng)前服務(wù)器支持的最高版本的XMLHTTP對(duì)象了
下面我們講一下采集功能函數(shù)
'GetFileText為采集功能函數(shù)
Public Function GetFileText(url)
on error resume next '有錯(cuò)誤時(shí)繼續(xù)執(zhí)行代碼
Dim http '定義變量
'Set http=Server.createobject(XmlHttpCom) '申請(qǐng)對(duì)象
Set http=Server.createobject("Microsoft.XMLHTTP") '保險(xiǎn)起見(jiàn),寫(xiě)出一個(gè)服務(wù)器一般都支持的版本
Http.open "GET",url,False '打開(kāi)對(duì)象 用GET方式 等待服務(wù)器響應(yīng)
Http.Send() '發(fā)送
If Http.readystate<>4 Then '如果服務(wù)器沒(méi)反應(yīng),則退出函數(shù)
Exit Function
End If
GetFileText=bytes2BSTR(Http.responseBody,"GB2312") '把得到的數(shù)據(jù)流二進(jìn)制文件 轉(zhuǎn)化成文本字符格式 (GB2312)
Set http=Nothing '刪除對(duì)象
If err.number<>0 Then err.Clear '如果有錯(cuò)誤,清除錯(cuò)誤
End Function
'// <summary>
'// 采用 ADODB.Stream 處理采集到的數(shù)據(jù),把二進(jìn)制的文件轉(zhuǎn)成文本字符
'// </summary>
Function Bytes2bStr(vin,cSet)
Dim BytesStream,StringReturn
Set BytesStream = Server.createObject("ADODB.Stream")
BytesStream.Type = 2
BytesStream.Open
BytesStream.WriteText vin
BytesStream.Position = 0
BytesStream.CharSet = cSet
BytesStream.Position = 2
StringReturn =BytesStream.ReadText
BytesStream.close
Set BytesStream = Nothing
Bytes2bStr = StringReturn
End Function
下面我定義一個(gè) 路徑變量 URL
URL = "http://ent.sina.com.cn/star/mainland/more.html";
上面是一個(gè)網(wǎng)址,如果我們想把上面這個(gè)地址采集下來(lái),并顯示出來(lái)的話,我們可以這樣操作
URL = "http://ent.sina.com.cn/star/mainland/more.html";
Response.Write GetFileText(URL)
這樣就可以采集到上面網(wǎng)址的內(nèi)容了
是不是很簡(jiǎn)單呢
那采集到數(shù)據(jù)之后應(yīng)該怎么操作呢
怎么區(qū)分?jǐn)?shù)據(jù),如果得到你想要的數(shù)據(jù),如果把得到的數(shù)據(jù)入庫(kù)呢
這是以后需要分析講解的問(wèn)題了 入庫(kù)要注意的地方,用正表達(dá)式處理數(shù)據(jù)
附上 上面代碼的源文件,大家可以下載下去,運(yùn)行起來(lái)試試,是不是真的能采集到數(shù)據(jù)庫(kù)
相關(guān)文章
直接保存URL圖像或網(wǎng)頁(yè)到服務(wù)器本地的類(lèi)
直接保存URL圖像或網(wǎng)頁(yè)到服務(wù)器本地的類(lèi)...2006-08-08Asp定時(shí)執(zhí)行操作 Asp定時(shí)讀取數(shù)據(jù)庫(kù)(網(wǎng)頁(yè)定時(shí)操作詳解)
由于目前部分網(wǎng)頁(yè)語(yǔ)言的限制,在定時(shí)操作上有一定的困難,但是經(jīng)過(guò)我多次的求證,發(fā)現(xiàn)第四種方法無(wú)疑是效果最好的,最省心的。2009-10-10網(wǎng)站生成靜態(tài)頁(yè)面攻略2:數(shù)據(jù)采集
網(wǎng)站生成靜態(tài)頁(yè)面攻略2:數(shù)據(jù)采集...2006-08-08網(wǎng)站生成靜態(tài)頁(yè)面攻略4:防采集而不防搜索引擎策略
網(wǎng)站生成靜態(tài)頁(yè)面攻略4:防采集而不防搜索引擎策略...2006-08-08非常不錯(cuò)的flash采集程序測(cè)試通過(guò)
非常不錯(cuò)的flash采集程序測(cè)試通過(guò)...2006-12-12