采集原理:
采集程序的主要步驟如下:
一、獲取被采集的頁(yè)面的內(nèi)容 二、從獲取代碼中提取所有用的數(shù)據(jù)
一、獲取被采集的頁(yè)面的內(nèi)容
我目前所掌握的ASP常用獲取被采集的頁(yè)面的內(nèi)容方法:
1、用serverXMLHTTP組件獲取數(shù)據(jù)
Function GetBody(weburl) '-----------------翟振愷(小琦) '創(chuàng)建對(duì)象 Dim ObjXMLHTTP Set ObjXMLHTTP=Server.CreateObject("MSXML2.serverXMLHTTP") '請(qǐng)求文件,以異步形式 ObjXMLHTTP.Open "GET",weburl,False ObjXMLHTTP.send While ObjXMLHTTP.readyState <> 4 ObjXMLHTTP.waitForResponse 1000 Wend '得到結(jié)果 GetBody=ObjXMLHTTP.responseBody '釋放對(duì)象 Set ObjXMLHTTP=Nothing '-----------------翟振愷(小琦) End Function
調(diào)用方法:GetBody(文件的URLf地址)
2、或XMLHTTP組件獲取數(shù)據(jù)
Function GetBody(weburl) '-----------------翟振愷(小琦) '創(chuàng)建對(duì)象 Set Retrieval = CreateObject("Microsoft.XMLHTTP") With Retrieval .Open "Get", weburl, False, "", "" .Send GetBody = .ResponseBody End With '釋放對(duì)象 Set Retrieval = Nothing '-----------------翟振愷(小琦) End Function
調(diào)用方法:GetBody(文件的URLf地址)
這樣獲取的數(shù)據(jù)內(nèi)容還需要進(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)用方法:BytesToBstr(要轉(zhuǎn)換的數(shù)據(jù),編碼)'編碼常用為GB2312和UTF-8。
二、從獲取代碼中提取所有用的數(shù)據(jù)
1、用ASP內(nèi)置的MID函數(shù)截取需要的數(shù)據(jù)
Function body(wstr,start,over) '-----------------翟振愷(小琦) start=Newstring(wstr,start) '設(shè)置需要處理的數(shù)據(jù)的唯一的開(kāi)始標(biāo)記 over=Newstring(wstr,over) '和start相對(duì)應(yīng)的就是需要處理的數(shù)據(jù)的唯一的結(jié)束標(biāo)記 body=mid(wstr,start,over-start) '設(shè)置顯示頁(yè)面的范圍 '-----------------翟振愷(小琦) End Function
調(diào)用方法:body(被采集的頁(yè)面的內(nèi)容,開(kāi)始標(biāo)記,結(jié)束標(biāo)記)
2、用正則獲取需要的數(shù)據(jù)
Function body(wstr,start,over) '-----------------翟振愷(小琦) Set xiaoqi = New Regexp'設(shè)置配置對(duì)象 xiaoqi.IgnoreCase = True'忽略大小寫(xiě) xiaoqi.Global = True'設(shè)置為全文搜索 xiaoqi.Pattern = "”&start&“.+?”&over&“"'正則表達(dá)式 Set Matches =xiaoqi.Execute(wstr)'開(kāi)始執(zhí)行配置 set xiaoqi=nothing body="" For Each Match in Matches body=body&Match.Value '循環(huán)匹配 Next '-----------------翟振愷(小琦) End Function
調(diào)用方法:body(被采集的頁(yè)面的內(nèi)容,開(kāi)始標(biāo)記,結(jié)束標(biāo)記)
采集程序祥細(xì)思路:
1、取得網(wǎng)站的分頁(yè)列表頁(yè)的每頁(yè)地址 目前絕大部分動(dòng)態(tài)網(wǎng)站的分頁(yè)地址都有規(guī)則,如: 動(dòng)態(tài)頁(yè) 第一頁(yè):index.asp?page=1 第二頁(yè):index.asp?page=2 第三頁(yè):index.asp?page=3 .....
靜態(tài)頁(yè) 第一頁(yè):page_1.htm 第二頁(yè):page_2.htm 第三頁(yè):page_3.htm .....
取得網(wǎng)站的分頁(yè)列表頁(yè)的每頁(yè)地址,只需要用變量替代每頁(yè)地址的變化的字符即可如:page_<%="&page&"%>.htm
2、獲取被采集網(wǎng)站的分頁(yè)列表頁(yè)內(nèi)容
3、從分頁(yè)列表代碼中提取[color=Blue]被采集的內(nèi)容頁(yè)面的URL連接地址[/color] 絕大部分分頁(yè)頁(yè)面里的內(nèi)容頁(yè)連接也有固定規(guī)則,如: <a href="url1">連接1</a> <br> <a href="url2">連接2</a> <br> <a href="url3">連接3</a> <br>
用以下代碼就可以獲得一個(gè)URL連接集合
'-----------------翟振愷(小琦) Set xiaoqi = New Regexp xiaoqi.IgnoreCase = True xiaoqi.Global = True xiaoqi.Pattern = ””“.+?”““ Set Matches =xiaoqi.Execute(頁(yè)面列表內(nèi)容) set xiaoqi=nothing url="" For Each Match in Matches url=url&Match.Value Next '-----------------翟振愷(小琦)
4、取得被采集的內(nèi)容頁(yè)面內(nèi)容,根據(jù)”提取標(biāo)記“從被采集的內(nèi)容頁(yè)面分別截取要取得的數(shù)據(jù)。
因?yàn)槭莿?dòng)態(tài)生成的頁(yè)面,大多數(shù)內(nèi)容頁(yè)面內(nèi)都有相同的html標(biāo)記,我們可以根據(jù)這些有規(guī)則的標(biāo)記提取需要的各個(gè)部分的內(nèi)容。如:
每個(gè)頁(yè)面都有網(wǎng)頁(yè)標(biāo)題<title>網(wǎng)頁(yè)標(biāo)題</title>,用我上面寫(xiě)的MID截取函數(shù)就可以獲得<title></title>之間的值,也可以用正則表達(dá)式來(lái)獲得。 例:body("<title>網(wǎng)頁(yè)標(biāo)題</title>","<title>","</title>")
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁(yè) 生成靜態(tài)頁(yè)面的方法 下一頁(yè) 防采集策略
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|