主頁(yè) > 知識(shí)庫(kù) > 用asp+xmlhttp編寫(xiě)web采集程序

用asp+xmlhttp編寫(xiě)web采集程序

熱門(mén)標(biāo)簽:外呼回?fù)芟到y(tǒng)圖片 常用地圖標(biāo)注范圍點(diǎn) 辦理400電話一年多少錢(qián) 為什么外呼系統(tǒng)需要預(yù)存話費(fèi)呢 寧夏怎么申請(qǐng)400電話 離線電子地圖標(biāo)注軟件注冊(cè) 蘭州智能語(yǔ)音電銷(xiāo)機(jī)器人功能 咸陽(yáng)銷(xiāo)售外呼系統(tǒng) 企數(shù)外呼系統(tǒng)能用多久
web采集程序?網(wǎng)頁(yè)抓取程序?小倫程序?不管怎么叫,這種程序應(yīng)用倒是蠻廣的。本文不討論這種使用這種程序引起的版權(quán)或道德問(wèn)題,只談這種程序在ASP+VBScript環(huán)境下的實(shí)現(xiàn) :-)

預(yù)備知識(shí):除了一般的ASP+VBScript的知識(shí)外,你還需要了解xmlhttp對(duì)象和正則表達(dá)式對(duì)象。xmlhttp對(duì)象是時(shí)下風(fēng)頭正勁的Ajax的主角;而學(xué)好了正則表達(dá)式,你再也不用為處理復(fù)雜的字符串犯愁。

在編寫(xiě)和調(diào)試正則表達(dá)式時(shí),RegEx 這個(gè)小工具非常有用。 

目錄
抓取一個(gè)遠(yuǎn)程網(wǎng)頁(yè)并保存到本地 
改進(jìn):處理亂碼 
同時(shí)下載遠(yuǎn)程網(wǎng)頁(yè)的圖片(和其它文件) 
改進(jìn):探測(cè)真實(shí)URL 
改進(jìn):避免重復(fù)下載 
實(shí)戰(zhàn)舉例(以****為例) 
分析列表頁(yè) 
內(nèi)容頁(yè)的技巧 
分析內(nèi)容頁(yè)中的上一頁(yè),下一頁(yè) 
高級(jí)主題:UTF-8和GB2312的轉(zhuǎn)換 
更多高級(jí)主題:登陸后抓取,客戶端偽造 
己有的采集程序 
原文鏈接:http://gwx.showus.net/blog/article.asp?id=229


1.抓取一個(gè)遠(yuǎn)程網(wǎng)頁(yè)并保存到本地
'用于調(diào)試的過(guò)程,后面會(huì)多次調(diào)用檢查中間結(jié)果
Dim inDebug:inDebug=True 
Sub D(Str)
    If inDebug = False Then Exit Sub
    Response.Write("div style='color:#003399; border: solid 1px #003399; background: #EEF7FF; margin: 1px; font-size: 12px; padding: 4px;'>")
    Response.Write(Str "/div>")
    Response.Flush()
End Sub

'過(guò)程: Save2File
'功能: 把文本或字節(jié)流保存為文件
'參數(shù): sContent    要保存的內(nèi)容
'       sFile       保存到文件,形如"files/abc.htm"
'       bText       是否是文本
'       bOverWrite  是否覆蓋己存在文件
Sub Save2File(sContent,sFile,bText,bOverWrite)
    Call D("Save2File:"+sFile+" *是否文本:"bText)
    Dim SaveOption,TypeOption
    If (bOverWrite = True) Then SaveOption=2 Else SaveOption=1
    If (bText = True) Then TypeOption=2 Else TypeOption=1
    Set Ads = Server.CreateObject("Adodb.Stream")
    With Ads
        .Type = TypeOption 
        .Open
        If (bText = True) Then .WriteText sContent Else .Write sContent
        .SaveToFile Server.MapPath(sFile),SaveOption
        .Cancel()
        .Close()
    End With
    Set Ads=nothing
End Sub

關(guān)鍵的函數(shù)
'函數(shù): myHttpGet
'功能: 抓取一個(gè)遠(yuǎn)程文件(網(wǎng)頁(yè)或圖片等)并保存到本地
'參數(shù): sUrl    遠(yuǎn)程文件的URL
'       bText   是否是文本(網(wǎng)頁(yè)),下載遠(yuǎn)程圖片是bText=False
'返回: 抓取的內(nèi)容
Function myHttpGet(sUrl,bText)
    Call D("font color=red>myHttpGet:/font>"+sUrl+" *是否文本:"bText)
    'Set oXml = Server.CreateObject("Microsoft.XMLHTTP")
    Set oXml = Server.CreateObject("MSXML2.ServerXMLHTTP")  '服務(wù)器版本的XMLHTTP組件
    '理解下面的內(nèi)容,你可以參考一下MSDN中的MSXML2.ServerXMLHTTP
    With oXml
        .Open "GET",sUrl,False
        .Send
        While .readyState > 4  '等待下載完畢
            .waitForResponse 1000 
        Wend 
        If bText = True Then
            myHttpGet = bytes2BSTR(.responseBody)
        Else
            myHttpGet = .responseBody
        End If
    End With
    Set oXml = Nothing
End Function

改進(jìn):處理亂碼
直接讀取服務(wù)器返回的中文內(nèi)容會(huì)出現(xiàn)亂碼,myHttpGet函數(shù)中引用的bytes2BSTR的作用是正確讀取服務(wù)器返回的文件中的雙字節(jié)文本(比如說(shuō)中文)
'myHttpGet helper 處理雙字節(jié)文本
Function bytes2BSTR(vIn)
    strReturn = ""
    For i = 1 To LenB(vIn)
        ThisCharCode = AscB(MidB(vIn,i,1))
        If ThisCharCode  H80 Then
            strReturn = strReturn  Chr(ThisCharCode)
        Else
            NextCharCode = AscB(MidB(vIn,i+1,1))
            strReturn = strReturn  Chr(CLng(ThisCharCode) * H100 + CInt(NextCharCode))
            i = i + 1
        End If
    Next
    bytes2BSTR = strReturn
End Function

bytes2BSTR函數(shù)的功能也可以利用Adodb.Stream組件通過(guò)下面的函數(shù)實(shí)現(xiàn),雖然下面的函數(shù)可以指定字符集Charset,但它并不能轉(zhuǎn)換編碼,即傳遞"UTF-8"給參數(shù)sCset,來(lái)讀取一張GB2312編碼的網(wǎng)頁(yè)將顯示為亂碼。
'CharsetHelper可以正確的讀取以sCset(如"GB2312","UTF-8"等)編碼的文件
Function CharsetHelper(arrBytes,sCset)
    Call D("CharsetHelper: "+sCset)
    Dim oAdos
    Set oAdos = CreateObject("Adodb.Stream")
    With oAdos
        .Type = 1
        .Mode =3    'adModeReadWrite
        .Open
        .Write arrBytes
        .Position = 0
        .Type = 2
        .Charset = sCset
        CharsetHelper = .ReadText 
        .Close
    End With
    Set oAdos = Nothing
End Function 

2.同時(shí)下載遠(yuǎn)程網(wǎng)頁(yè)的圖片(和其它文件)
'函數(shù): ProcessRemoteUrl
'功能: 替換字符串中的遠(yuǎn)程文件為本地文件并保存遠(yuǎn)程文件
'參數(shù): strContent  要替換的字符串,即遠(yuǎn)程網(wǎng)頁(yè)文件的內(nèi)容
'       sSavePath   不以/結(jié)尾的相對(duì)路徑,指示遠(yuǎn)程文件的本地保存路徑
'       sPreceding  更改后的URL前綴,如http://somehost/upload/
'返回: 替換遠(yuǎn)程路徑為本地路徑之后的新的網(wǎng)頁(yè)文本內(nèi)容
Function ProcessRemoteUrl(sContent,sSavePath,sPreceding)
    Call D("ProcessRemoteUrl")

    Set re=new RegExp
    re.IgnoreCase =true
    re.Global=True
    '下面的正則中.SubMatches(4)=文件名全名.SubMatches(5)文件擴(kuò)展名
    re.Pattern = "((http):(?:\/\/){1}(?:(?:\w)+[.])+(net|com|cn|org|cc|tv|[0-9]{1,4})(\S*\/)((?:\S)+[.]{1}(gif|jpg|jpeg|png|bmp)))"

    Set RemoteFile = re.Execute(sContent)

    Dim SaveFileName
    'RemoteFile     正則表達(dá)式Match對(duì)象的集合
    'RemoteFileUrl  正則表達(dá)式Match對(duì)象
    For Each RemoteFileUrl in RemoteFile
        SaveFileName = RemoteFileUrl.SubMatches(4)
        Call Save2File(myHttpGet(RemoteFileUrl,False),sSavePath"/"SaveFileName,False,True)
        sContent=Replace(sContent,RemoteFileUrl,sPrecedingSaveFileName)
    Next

    ProcessRemoteUrl=sContent
End Function 
改進(jìn):探測(cè)真實(shí)URL
上面的ProcessRemoteUrl函數(shù)不能正確處理形如img src="upload/abc.jpg" />和a href="/upload/abc.gif" ...的內(nèi)容,要處理這些相對(duì)鏈接,我們可以先用下面的函數(shù)把網(wǎng)頁(yè)中的相對(duì)鏈接都轉(zhuǎn)換成絕對(duì)鏈接
'函數(shù): DetectUrl
'功能: 替換字符串中的遠(yuǎn)程文件相對(duì)路徑為以http://..開(kāi)頭的絕對(duì)路徑
'參數(shù): sContent    要處理的含相對(duì)路徑的網(wǎng)頁(yè)的文本內(nèi)容
'       sUrl        所處理的遠(yuǎn)程網(wǎng)頁(yè)自身的URL,用于分析相對(duì)路徑
'返回: 替換相對(duì)鏈接為絕對(duì)鏈接之后的新的網(wǎng)頁(yè)文本內(nèi)容
Function DetectUrl(sContent,sUrl)
    Call D("DetectUrl:"sUrl)

    '分析URL
    Dim re,sMatch
    Set re=new RegExp
    re.Multiline=True
    re.IgnoreCase =true
    re.Global=True

    re.Pattern = "(http://[-A-Z0-9.]+)/[-A-Z0-9+@#%~_|!:,.;/]+/"
    Dim sHost,sPath
    'http://localhost/get/sample.asp
    Set sMatch=re.Execute(sUrl)
    'http://localhost
    sHost=sMatch(0).SubMatches(0)
    'http://localhost/get/
    sPath=sMatch(0)

    re.Pattern = "(src|href)=""?((?!http://)[-A-Z0-9+@#%=~_|!:,.;/]+)""?"
    Set RemoteFile = re.Execute(sContent)

    'RemoteFile 正則表達(dá)式Match對(duì)象的集合
    'RemoteFileUrl 正則表達(dá)式Match對(duì)象,形如src="Upload/a.jpg"
    Dim sAbsoluteUrl
    For Each RemoteFileUrl in RemoteFile
        'img src="a.jpg">,img src="f/a.jpg">,img src="/ff/a.jpg">
        If Left(RemoteFileUrl.SubMatches(1),1)="/" Then
            sAbsoluteUrl=sHost
        Else
            sAbsoluteUrl=sPath
        End If
        sAbsoluteUrl = RemoteFileUrl.SubMatches(0)"="""sAbsoluteUrlRemoteFileUrl.SubMatches(1)""""
        sContent=Replace(sContent,RemoteFileUrl,sAbsoluteUrl)
    Next

    DetectUrl=sContent
End Function 
改進(jìn):避免重復(fù)下載
網(wǎng)頁(yè)中的有些圖片,比如spacer.gif重復(fù)出現(xiàn),會(huì)被重復(fù)下載,壁免這個(gè)問(wèn)題的一個(gè)方法是設(shè)置一個(gè)arrUrls數(shù)組,把采集過(guò)的文件的URL放在里面,在每次采集前先遍歷數(shù)組看是否已經(jīng)采集,然后只參集沒(méi)有參集過(guò)的文件

3.實(shí)戰(zhàn)舉例(以****為例)
****是我最經(jīng)常去的地方,而且網(wǎng)速不錯(cuò),就以她為例啦,沒(méi)有惡意哦:-)

分析列表頁(yè)
內(nèi)容頁(yè)的技巧
分析內(nèi)容頁(yè)中的上一頁(yè),下一頁(yè)
想了一下,這部分內(nèi)容還是晢時(shí)不寫(xiě),免得被BS了  :-),還省得打好多字。 無(wú)非是把遠(yuǎn)程網(wǎng)頁(yè)采集下來(lái),然后用正則表達(dá)式分析提取其中的特定內(nèi)容,如標(biāo)題,作者,內(nèi)容之類(lèi)的 我有兩個(gè)小小的經(jīng)驗(yàn): 

一是網(wǎng)頁(yè)源碼前后的內(nèi)容對(duì)分析有很大的干擾,你可以用下面的方法先把它支除
'抽取部分內(nèi)容進(jìn)行分析,你可以用用EditPlus數(shù)字?jǐn)?shù)
'去除前7600和后5000的字符
sPageW=Left(sPageW,Len(sPageW)-5000)
sPageW=Mid(sPageW,7600)

二是你可能不想在對(duì)方的服務(wù)器上留下連續(xù)的瀏覽記錄,下面的一個(gè)小函數(shù)會(huì)有所幫助
'過(guò)程: Sleep
'功能: 程序在此晢停幾秒
'參數(shù): iSeconds    要暫停的秒數(shù)
Sub Sleep(iSeconds)
    D Timer()" font color=blue>Sleep For "iSeconds" Seconds/font>"
    Dim t:t=Timer()
    While(Timer()t+iSeconds)
        'Do Nothing
    Wend
    D Timer()" font color=blue>Sleep For "iSeconds" Seconds OK/font>"
End Sub

'調(diào)用舉例,晢停,時(shí)長(zhǎng)隨機(jī),在3秒以內(nèi)
Sleep(Fix(Rnd()*3)) 

三就是多用正則表達(dá)式測(cè)試工具提高編寫(xiě)正則表達(dá)式的效率

4.高級(jí)主題:UTF-8和GB2312的轉(zhuǎn)換
這個(gè)問(wèn)題比較復(fù)雜,由于我智力和精力方面的原因沒(méi)有完全搞定,網(wǎng)上己有的資料也大多不完全正確或者不全面,我推薦一個(gè)UTF-8和GB2312的轉(zhuǎn)換的C語(yǔ)言的實(shí)現(xiàn)供大家參考,它功能完整而且不依賴(lài)Windows API函數(shù)。
我在試著用ASP+VBScript實(shí)現(xiàn)它,有一些不太成熟的經(jīng)驗(yàn):

計(jì)算機(jī)上的文件、操作系統(tǒng)內(nèi)部的字符串表示都是Unicode的,所以,UTF-8和GB2312之間的轉(zhuǎn)換需要以Unicode為中介 
UTF-8就是Unicode的一個(gè)變體,它們之間的相互轉(zhuǎn)換比較簡(jiǎn)單,參考下圖就可以了 
GB2312和Unicode的編碼好像是不相關(guān)的,不依賴(lài)操作系統(tǒng)內(nèi)部函數(shù)進(jìn)行轉(zhuǎn)換就需要一個(gè)編碼映射表,指出GB2312和Unicode的編碼一一對(duì)應(yīng)的關(guān)系,這個(gè)編碼表大約包含7480×2個(gè)項(xiàng)目。 
在ASP文件中,要默認(rèn)以某和編碼(如GB2312)讀取一個(gè)字符串,需要將ASP的CodePage設(shè)為相應(yīng)代碼頁(yè)(對(duì)GB2312是CodePage=936) 
編碼轉(zhuǎn)換中還有一些又小又重要的問(wèn)題我還不知道:-( 
5.更多高級(jí)主題:登陸后抓取,客戶端偽造等
xmlhttp對(duì)象可以以post或get的方法與http服務(wù)器交互,可以設(shè)置和讀取http頭,學(xué)習(xí)一下http協(xié)議,并且更深入的了解一些xmlhttp對(duì)象的方法和屬性,你就可以用它來(lái)模擬一個(gè)瀏覽器,自動(dòng)的做各種以前需要人來(lái)做的重復(fù)工作。


6.己有的采集程序
本文旨在討論采集程序在ASP+VBScript環(huán)境下的實(shí)現(xiàn),如果你需要一個(gè)網(wǎng)頁(yè)采集程序,下面的鏈接可能對(duì)你有用。 

LocoySpider火車(chē)頭網(wǎng)頁(yè)內(nèi)容采集器 
C#+.Net編寫(xiě)的內(nèi)容采集器,它的一個(gè)重要特點(diǎn)是不將采集來(lái)的內(nèi)容保存到數(shù)據(jù)庫(kù),而是使用自定的POST提交的別的網(wǎng)頁(yè),如內(nèi)容管理系統(tǒng)的新建內(nèi)容頁(yè)。免費(fèi)。 BeeCollector (小蜜蜂采集器) 
PHP+MySQL編寫(xiě)的內(nèi)容采集器。 風(fēng)訊內(nèi)容管理系統(tǒng) 
這個(gè)強(qiáng)大的內(nèi)容管理系統(tǒng)內(nèi)帶有一個(gè)ASP的網(wǎng)頁(yè)內(nèi)容采集器+查看評(píng)論 (0)+發(fā)表評(píng)論+Trackback地址+Trackbacks (0)2006-8-9正則表達(dá)式在網(wǎng)絡(luò)編程中的運(yùn)用
分類(lèi):Ajax時(shí)間:2006-8-9 14:07:47作者:janyin導(dǎo)讀: 
正則表達(dá)式在網(wǎng)絡(luò)編程中的運(yùn)用

[前言:]在我們編寫(xiě)WEB程序時(shí),經(jīng)常會(huì)判斷一個(gè)字符串的有效性,如;一個(gè)串是否是數(shù)字、是否是有效的Email地址等等。如果不使用正則表達(dá)式,那么判斷的程序會(huì)很長(zhǎng),并且容易出錯(cuò),如果使用正則表達(dá)式,這些判斷就是一件很輕松的工作了。本文全面介紹正則表達(dá)式的慨念、格式。并以在PHP、ASP中的應(yīng)用實(shí)例增加讀者的感性認(rèn)識(shí)。正則表達(dá)式的應(yīng)用很廣,需要大家在學(xué)習(xí)和實(shí)踐中不斷的總結(jié)。

正則表達(dá)式簡(jiǎn)介 
簡(jiǎn)單的說(shuō),正則表達(dá)式是一種可以用于模式匹配和替換的強(qiáng)有力的工具。在網(wǎng)絡(luò)編程中應(yīng)用廣泛,如PHP腳本語(yǔ)言或是JavaScript、VBScript這樣的客戶端腳本語(yǔ)言都提供了對(duì)正則表達(dá)式的支持。由此可見(jiàn),正則表達(dá)式已經(jīng)超出了某種語(yǔ)言或某個(gè)系統(tǒng)的局限,成為人們廣為接受的概念和功能。 

正則表達(dá)式可以讓用戶通過(guò)使用一系列的特殊字符構(gòu)建匹配模式,然后把匹配模式與數(shù)據(jù)文件、程序輸入以及WEB頁(yè)面的表單輸入等目標(biāo)對(duì)象進(jìn)行比較,根據(jù)比較對(duì)象中是否包含匹配模式,執(zhí)行相應(yīng)的程序。 

舉例來(lái)說(shuō),正則表達(dá)式的一個(gè)最為普遍的應(yīng)用就是用于驗(yàn)證用戶在線輸入的郵件地址的格式是否正確,如果通過(guò)正則表達(dá)式驗(yàn)證用戶郵件地址的格式正確,用戶所填寫(xiě)的表單信息將會(huì)被正常處理;反之,如果用戶輸入的郵件地址與正則表達(dá)的模式不匹配,將會(huì)彈出提示信息,要求用戶重新輸入正確的郵件地址。由此可見(jiàn)正則表達(dá)式在WEB應(yīng)用的邏輯判斷中具有舉足輕重的作用。在后面我們會(huì)舉例詳細(xì)介紹。 

正則表達(dá)式形式一般如:/love/,其中位于"/"定界符之間的部分就是將要在目標(biāo)對(duì)象中進(jìn)行匹配的模式。用戶只要把希望查找匹配對(duì)象的模式內(nèi)容放入"/"定界符之間即可。為了能夠使用戶更加靈活的定制模式內(nèi)容,正則表達(dá)式提供了專(zhuān)門(mén)的"元字符"。所謂元字符就是指那些在正則表達(dá)式中具有特殊意義的專(zhuān)用字符,可以用來(lái)規(guī)定其前導(dǎo)字符(即位于元字符前面的字符)在目標(biāo)對(duì)象中的出現(xiàn)模式。較為常用的元字符包括: "+,"*,?以及{}",或者"\s,\S,\d,\w和\W"等等。為了能夠方便用戶更加靈活的設(shè)定匹配模式,正則表達(dá)式允許使用者在匹配模式中利用[]界定匹配于某一個(gè)范圍的字符而不局限于具體的字符。 

除了我們以上的元字符之外,正則表達(dá)式中還具有另外一種較為獨(dú)特的專(zhuān)用字符,即定位符。定位符用于規(guī)定匹配模式在目標(biāo)對(duì)象中的出現(xiàn)位置。較為常用的定位符包括: "^", "$", "\b" 以及 "\B"。 

如果我們希望在正則表達(dá)式中實(shí)現(xiàn)類(lèi)似編程邏輯中的"或"運(yùn)算,在多個(gè)不同的模式中任選一個(gè)進(jìn)行匹配的話,可以使用管道符 "|"。例如: 正則表達(dá)式中還有一個(gè)較為常用的運(yùn)算符,即否定符 "[^]"。與我們前文所提到的定位符 "^" 不同,否定符 "[^]"規(guī)定目標(biāo)對(duì)象中不能存在模式中所規(guī)定的字符串。一般來(lái)說(shuō),當(dāng)"^"出現(xiàn)在 "[]"內(nèi)時(shí)就被視做否定運(yùn)算符;而當(dāng)"^"位于"[]"之外,或沒(méi)有"[]"時(shí),則應(yīng)當(dāng)被視做定位符。 

最后,當(dāng)用戶需要在正則表達(dá)式的模式中加入元字符,并查找其匹配對(duì)象時(shí),可以使用轉(zhuǎn)義符"\"。例如:/Th\*/,該正則表達(dá)式將會(huì)與目標(biāo)對(duì)象中的"Th*"而非"The"等相匹配。

正則表達(dá)式的語(yǔ)法規(guī)則和標(biāo)記
現(xiàn)在我們正式進(jìn)入則表達(dá)式的學(xué)習(xí),我會(huì)根據(jù)實(shí)例結(jié)合講解正則表達(dá)式的用法,看完后你就會(huì)覺(jué)得寫(xiě)UBB代碼如此簡(jiǎn)單了,只要你一步一步的跟著我學(xué) 看完本文章后你就成為UBB高手了。激動(dòng)人心的就是你能寫(xiě)出自已的UBB標(biāo)簽來(lái)了,再也不用到別人那里去拷貝現(xiàn)成的代碼和模板了。 還好VBScritp5.0給我們提供了"正則表達(dá)式"對(duì)象,只要你的服務(wù)器安裝了IE5.x,就可以運(yùn)行了.

字符描述:

^符號(hào)匹配字符串的開(kāi)頭。例如:
^abc 與"abc xyz"匹配,而不與"xyz abc"匹配

$符號(hào)匹配字符串的結(jié)尾。例如:
abc$ 與"xyz abc"匹配,而不與"abc xyz"匹配。

注意:如果同時(shí)使用^符號(hào)和$符號(hào),將進(jìn)行精確匹配。例如:
^abc$ 只與"abc"匹配 

*符號(hào)匹配0個(gè)或多個(gè)前面的字符。例如:
ab* 可以匹配"ab"、"abb"、"abbb"等

+符號(hào)匹配至少一個(gè)前面的字符。例如:
ab+ 可以匹配"abb"、"abbb"等,但不匹配"ab"。 

?符號(hào)匹配0個(gè)或1個(gè)前面的字符。例如:
ab?c? 可以且只能匹配"abc"、"abbc"、"abcc"和"abbcc"

.符號(hào)匹配除換行符以外的任何字符。例如:
(.)+ 匹配除換行符以外的所有字符串

x|y匹配"x"或"y"。例如:
abc|xyz 可匹配 "abc"或 "xyz",而"ab(c|x)yz"匹配 "abcyz"和"abxyz"

{n}匹配恰好n次(n為非負(fù)整數(shù))前面的字符。例如:
a{2} 可以匹配"aa",但不匹配"a"

{n,}匹配至少n次(n為非負(fù)整數(shù))前面的字符。例如:
a{3,} 匹配"aaa"、"aaaa"等,但不匹配"a"和"aa"。

注意:a{1,}等價(jià)于a+
a{0,}等價(jià)于a*

{m,n}匹配至少m個(gè),至多n個(gè)前面的字符。例如:
a{1,3} 只匹配"a"、"aa"和"aaa"。

注意:a{0,1}等價(jià)于a?

[xyz]表示一個(gè)字符集,匹配括號(hào)中字符的其中之一。例如:
[abc] 匹配"a"、"b"和"c"

[^xyz]表示一個(gè)否定的字符集。匹配不在此括號(hào)中的任何字符。例如:
[^abc] 可以匹配除"a"、"b"和"c"之外的任何字符

[a-z]表示某個(gè)范圍內(nèi)的字符,匹配指定區(qū)間內(nèi)的任何字符。例如:
[a-z] 匹配從"a"到"z"之間的任何一個(gè)小寫(xiě)字母字符

[^m-n]表示某個(gè)范圍之外的字符,匹配不在指定范圍內(nèi)的字符。例如:
[m-n] 匹配除從"m"到"n"之間的任何字符

\符號(hào)是轉(zhuǎn)義操作符。例如:
\n 換行符
\f 分頁(yè)符
\r 回車(chē)
\t 制表符
\v 垂直制表符 

\\ 匹配"\"
\/ 匹配"/"
\s 任何白字符,包括空格、制表符、分頁(yè)符等。等價(jià)于"[ \f\n\r\t\v]"
\S 任何非空白的字符。等價(jià)于"^\f\n\r\t\v]"
\w 任何單詞字符,包括字母和下劃線。等價(jià)于"[A-Za-z0-9_]"

\W 任何非單詞字符。等價(jià)于"[^A-Za-z0-9_]"

\b匹配單詞的結(jié)尾。例如:
ve\b 匹配單詞"love"等,但不匹配"very"、"even"等

\B匹配單詞的開(kāi)頭。例如:
ve\B 匹配單詞"very"等,但不匹配"love"等

\d匹配一個(gè)數(shù)字字符,等價(jià)于[0-9]。例如:
abc\dxyz 匹配"abc2xyz"、"abc4xyz"等,
但不匹配"abcaxyz"、"abc-xyz"等

\D匹配一個(gè)非數(shù)字字符,等價(jià)于[^0-9]。例如:
abc\Dxyz 匹配"abcaxyz"、"abc-xyz"等,
但不匹配"abc2xyz"、"abc4xyz"等

\NUM匹配N(xiāo)UM個(gè)(其中NUM為一個(gè)正整數(shù)),引用回到記住的匹配。例如:
(.)\1 匹配兩個(gè)連續(xù)相同的字符。 

\oNUM匹配n(其中n為一個(gè)小于256的八進(jìn)制換碼值)。例如:
\o011 匹配制表符

\xNUM匹配N(xiāo)UM(其中NUM為一個(gè)小于256的十六進(jìn)制換碼值)。例如:
\x41 匹配字符"A"

應(yīng)用實(shí)例 
在對(duì)正則表達(dá)式有了較為全面的了解之后,就可以在Perl,PHP,以及ASP等程式中使用正則表達(dá)式了。

下面以PHP語(yǔ)言為例,使用驗(yàn)證用戶在線輸入的郵件地址以及網(wǎng)址的格式是否正確。PHP 提供了eregi()或ereg()資料處理函數(shù)實(shí)現(xiàn)字串比對(duì)剖析的模式匹配操作ereg()函數(shù)的使用格式如下: 

ereg (pattern, string) 

其中,pattern代表正則表達(dá)式的模式;而string則是執(zhí)行查找替換操作的目標(biāo)對(duì)象,如Email地址值。本函式以 pattern 的規(guī)則來(lái)剖析比對(duì)字串 string,找到則傳回值為 true。函式ereg()與eregi()的區(qū)別就是前者區(qū)分大小寫(xiě),后者與大小寫(xiě)無(wú)關(guān)。使用PHP編寫(xiě)的程序代碼如下: 

以下是引用片段:
<?php  
if (ereg("^([a-z0-9_-])+@([a-zZ0-9_-])+(\.[a-z0-9_-])+[a-z]{2,3}$",$email))  
{ echo "您的 E-Mail 通過(guò)初步檢查!";}  
else  
{ echo "不是合法的E-Mail 地址,請(qǐng)重新輸入!";}  
?>  



這個(gè)例子是可對(duì)使用者輸入的 E-Mail 作簡(jiǎn)單的檢查,檢查使用者的 E-Mail 字串是否有 @ 字元,在 @ 字元前有小寫(xiě)英文字母、數(shù)字或下"_",在 @ 之后有數(shù)節(jié)字串,最后的小數(shù)點(diǎn)后只能有二個(gè)或三個(gè)小寫(xiě)英文字母。如webmaster@mail.sever.net, hello_2001@88new.cn就可以通過(guò)檢查,而New99@253.com(出現(xiàn)大寫(xiě)字母)和new99@253.comn(最后的小數(shù)點(diǎn)后只能超過(guò)3個(gè)英文字母)就不能通過(guò)檢查。 

我們通過(guò)調(diào)用自定義正規(guī)則判別函式也可以進(jìn)行檢查操作,如下面的網(wǎng)址檢驗(yàn)函式: 

以下是引用片段:
function VerifyWebSiteAddr ($strWebSiteAddr){  
return (eregi ("^([_0-9a-z-]+.)+([0-9a-z-]+.)+[a-z]{2,3}$", $strWebSiteAddr));  
}  


我們知道,PHP程式的運(yùn)行必須有服務(wù)器支持,如果您在自己的主頁(yè)上想實(shí)現(xiàn)以上功能, 嵌入式腳本語(yǔ)言Javascript或許是好的選擇。JavaScript中帶有一個(gè)功能強(qiáng)大的RegExp()對(duì)象,可以用來(lái)進(jìn)行正則表達(dá)式的匹配操作。其中的test()方法可以檢驗(yàn)?zāi)繕?biāo)對(duì)象中是否包含匹配模式,并相應(yīng)的返回true或false。只須在HTML文檔的<head>區(qū)域添加一段Javascript代碼。 

以下是引用片段:
< language="Javascript1.2">  
function verifyAddress(obj){  
var email = obj.email.value;  
var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;  
flag = pattern.test(email);  
if(flag){  
alert("您的 E-Mail 通過(guò)初步檢查!");  
return true;}  
else{  
alert("不是合法的E-Mail 地址,請(qǐng)重新輸入!");  
return false;}  
}  
</script> 


然后在網(wǎng)頁(yè)中輸入信息的表單域<form>標(biāo)簽區(qū)域內(nèi)中加入一行如下代碼: 

以下是引用片段:
<o(jì)nSubmit="return verifyAddress(this);"> 


 當(dāng)按下提交按鈕后,首先運(yùn)行verifyAddress()函式,進(jìn)行匹配識(shí)別,如果滿足條件則發(fā)送表單信息到目標(biāo)頁(yè)面,否則返回錯(cuò)誤信息。 

事實(shí)上,正則表達(dá)式的功能遠(yuǎn)非本文提到的這一點(diǎn),下次,給大家介紹一種使用正則表達(dá)式從任意指定網(wǎng)頁(yè)中析取任意種類(lèi)文本信息(如網(wǎng)頁(yè)中所有的圖片文件名)的技巧?!?

Html源文件中image標(biāo)簽的析取 
上篇,我們介紹了正則表達(dá)式的概念及其在網(wǎng)絡(luò)編程中使用正則表達(dá)式驗(yàn)證用戶在線輸入的郵件地址以及網(wǎng)址的格式是否正確的應(yīng)用實(shí)例,今天介紹一種從指定網(wǎng)頁(yè)源文件中析取image標(biāo)簽的的編程技巧,即從網(wǎng)頁(yè)源文件中,解析出所有的插圖文件名(包括圖片路徑),也就是標(biāo)簽<img src=".../.../abc.jpg"> 中的文件名".../.../abc.jpg"(有的可能是gif格式)。編程環(huán)境:PHP+Apache for Win98。 

首先, 用文本編輯器新建一個(gè)PHP類(lèi)型的文件:abstractSRCfrompage.php3。為了方便講解,我們打算是在瀏覽器表單域中輸入需要析取image標(biāo)簽的網(wǎng)頁(yè)的URL(或本機(jī)文檔),提交后執(zhí)行析取操作,所以在該文件中,我們要建立一個(gè)用于輸入網(wǎng)址的表單,舉例如下: 

以下是引用片段:
<form action=" abstractSRCfrompage.php3" method="post"> 
輸入網(wǎng)址<input type=text name=filename><br> 
<input type=submit name=submit value="提交"> 
</form> 


輸入正確的網(wǎng)址,提交后表單信息被送到abstractSRCfrompage.php3頁(yè)面,由于表單本身就在該頁(yè)面,所以相當(dāng)于被送到自身頁(yè)面,下面我們需要編寫(xiě)析取處理的PHP代碼,緊接著表單代碼段后寫(xiě)入如下代碼:

以下是引用片段:
<?php 
if ($filename!=""){ 
$fp = fopen($filename, "r"); file://若輸入不為空,開(kāi)啟本地或者遠(yuǎn)程檔案; 
while ($buffer = fgets($fp, 1024)) { 
$source .=$buffer; } 
fclose($fp); 
file://查找$source中是否有<img ...src=".../...gif | jpg"> 這樣的標(biāo)記 
if(eregi("(<img)+[^<>]+(src=\")+[^\*\"<>|]+(\.)+((gif)|(jpg))+(\")",$source)) { 
echo "找到圖片標(biāo)簽:)<br>";} 
else{ 
echo "未發(fā)現(xiàn)圖片標(biāo)簽:(<br>";} 
file://拆分,第一次用標(biāo)簽,<img ...src=拆分,得到了以圖形文件名開(kāi)頭的數(shù)組, 
$splitres=split("((\">)|())+(<img)+[^<>]+(src=\")",$source); 
echo "找到: $imagenums-1個(gè)圖片<br>分別為:<br>"; 
for($i=1;$i<sizeof($splitres);$i++){ 
file://二次拆分,用"拆分。因?yàn)槲募芎?,得到的拆分?jǐn)?shù)組的第一個(gè)元素就是路徑+文件名了; 
unset($imgname); // 再次使用前刪除imgname變量; 
$imgname=spliti("\"",$splitres[$i]);//將析取的圖片信息依次賦給imgname變量 
echo "$i=>".$imgname[0]."<br>"; file://輸出析取的圖片信息 


?> 


該段程序的設(shè)計(jì)思路是:PHP程式判斷是否輸入了檔案名稱(chēng)(網(wǎng)址URL或本機(jī)檔案名),若不為空則以只讀方式打開(kāi)該檔案;接著使用函式fgets(fp,length)取得檔案指標(biāo)fp所指的行并傳回該行內(nèi)長(zhǎng)度為length-1 的字串,上例中就是1024-1=1023;然后利用字串比對(duì)剖析函式ereg()查找$source中是否含有<img ...src=".../...gif | jpg"> 

這樣的標(biāo)記(關(guān)于該函式在上篇中有詳細(xì)的介紹);假如找到的話,則利用split()函式按一定的規(guī)則執(zhí)行兩次拆分,去掉標(biāo)記中的<img...src=字符和"字符,結(jié)果得到數(shù)組splitres,其中的每一個(gè)元素都是以圖形路徑+文件名開(kāi)頭的數(shù)組;用for循環(huán)在屏幕上輸出每個(gè)數(shù)組的第一個(gè)元素值,即我們所需要的所有圖形路徑+文件名。

其中函式sizeof($splitres)返回個(gè)數(shù);在for循環(huán)中,依次將數(shù)組splitres的每個(gè)元素(也是數(shù)組)賦給數(shù)組變量imgname,并輸出imgname的第一個(gè)元素值(為找到的一個(gè)圖形路徑+文件名),當(dāng)執(zhí)行下次循環(huán)時(shí),刪除變量imgname,達(dá)到重復(fù)使用的目的。大家可以仔細(xì)研究其中的奧妙。

好了,寫(xiě)好后,將abstractSRCfrompage.php3存到你的服務(wù)器指定目錄下,啟動(dòng)Apache服務(wù)器,在瀏覽器中打開(kāi)它,隨便輸入一個(gè)存在的網(wǎng)頁(yè)名稱(chēng)或是遠(yuǎn)程URL,看看效果如何。

如果有興趣,你可以嘗試析取HTML文檔中的任意感興趣的信息,如果稍加改裝,做一個(gè)網(wǎng)站文本搜索引擎豈不更妙?

正則表達(dá)式在UBB論壇中的應(yīng)用
一、UBB代碼的概念

什么是UBB代碼?

UBB代碼是HTML的一個(gè)變種。一般情況下,UBB論壇不允許你使用HTML代碼,而只能用UBB代碼替代HTML代碼。

UBB代碼是一套由流行的UBB標(biāo)簽組成了固定代碼,代碼有統(tǒng)一的格式。用戶只要遵循代碼規(guī)則就可以實(shí)現(xiàn)用戶想要的功能。如:想要顯示粗體的how are you 字樣,就應(yīng)該輸入 how are you而不是輸入<b>how are you</b>

你也許會(huì)問(wèn):ASP是怎樣把 how are you轉(zhuǎn)換為<b>how are you</b>的呢?

回答這個(gè)問(wèn)題就是:用正則表達(dá)式。

二、實(shí)例分析

1)在字符串中精確查找鏈接地址 

以下是引用片段:
((http|https|ftp):(\/\/|\\\\)((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(((\/[\~]*|\\[\~]*) 
(\w)+)|[.](\w)+)*(((([?](\w)+){1}[=]*))*((\w)+){1}([\](\w)+[\=](\w)+)*)*) 


我們知道,鏈接地址一般以http或者h(yuǎn)ttps或者ftp等形式出現(xiàn)。初步總結(jié)一下就是,鏈接地址必須符合如下條件:

條件1

以http://或者h(yuǎn)ttps://或者ftp://等開(kāi)頭(當(dāng)然還有其它形式,這里只列出主要的)

條件2

http://后面必須跟一個(gè)單詞字符,緊接著單詞字符后面的是"."(這樣的組合必須出現(xiàn)一次或多次)。緊跟著"."后面的是域名后綴(如net或者com或者cn等,如果是以IP地址的形式出現(xiàn)就可以是數(shù)字)

條件3

出現(xiàn)完整的鏈接地址后,還可以出現(xiàn)下一級(jí)或者更多級(jí)的目錄(還要注意個(gè)人主頁(yè)的地址有可能出現(xiàn)"~"符號(hào))

條件4

鏈接地址末尾可以帶參數(shù)。如典型的頁(yè)數(shù)?PageNo=2action=display等

現(xiàn)在我們用下面的代碼來(lái)逐個(gè)匹配上面的條件--

1、((http|https|ftp):(\/\/|\\\\) 滿足條件1

表示http:// http:\\ https:// https:\\ ftp:// ftp:\\都匹配(在這里考慮了某些用戶可能把"http://"輸成"\\"的易發(fā)性錯(cuò)誤)

注意:"|"表示"或者","\"是轉(zhuǎn)義字符。"\/\/"表示"http://","\\\\"表示"\\"

2、((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3}) 滿足條件2

"((\w)+[.]){1,}"表示一個(gè)單詞字符加一個(gè)點(diǎn)號(hào)可以出現(xiàn)1次或者多次(這里考慮了某些用戶喜歡省略www而將http://www.w3c.com寫(xiě)成http://w3c.com)

"(net|com|cn|org|cc|tv|[0-9]{1,3})"表示必須要以net或者com或者cn或者org或者cc或者tv或者三位以下的數(shù)字結(jié)束

[0-9]{1,3}表示三位以下的數(shù)字,因?yàn)閕p地址的任何段不能超過(guò)255

3、(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)* 滿足條件3

"(\/[\~]*|\\[\~]*)"表示可以出現(xiàn)"/~"或者是"\~",(其中"[\~]*"表示 ~ 可以出現(xiàn)也可以不出現(xiàn)),因?yàn)椴皇敲總€(gè)鏈接地址都有下一級(jí)目錄

"(\w)+)|[.](\w)+)"表示必須出現(xiàn)一個(gè)單詞字符(即目錄或者是一個(gè)帶有擴(kuò)展名的文件)

注意:最后還有一個(gè)"*"表示上面括號(hào)內(nèi)的可以出現(xiàn)也可以不出現(xiàn),否則就只能匹配有下一級(jí)目錄的鏈接地址了。

4、(((([?](\w)+){1}[=]*))*((\w)+){1}([\](\w)+[\=](\w)+)*)*)滿足條件4

"((([?](\w)+){1}[=]*))*((\w)+){1}"表示形如"?PageNo=2"的字符串可以出現(xiàn)也可以不出現(xiàn),如果出現(xiàn)則只能出現(xiàn)一次(因?yàn)椴豢赡苡袃蓚€(gè)"?"號(hào)出現(xiàn))。

"([\](\w)+[\=](\w)+)*)"表示形如"action=display"的字符串可以出現(xiàn)也可以不出現(xiàn)(因?yàn)椴⒉皇敲總€(gè)網(wǎng)頁(yè)都帶有兩個(gè)以上的參數(shù)。

整個(gè)"((([?](\w)+){1}[=]*))*((\w)+){1}([\](\w)+[\=](\w)+)*)*"表示形如"?PageNo=2action=display"的字符串可以出現(xiàn)也可以不出現(xiàn)(即鏈接地址可以有參數(shù)也可以沒(méi)有參數(shù))

把上面的組合起來(lái),我們就可以匹配一個(gè)比較全面的鏈接地址了。比用簡(jiǎn)單的"(http:\/\/\S+)"來(lái)匹配一個(gè)鏈接地址要好,讀者可以自行行測(cè)試比較。當(dāng)然,這段代碼還有很多不足之處,希望大家能夠繼續(xù)改進(jìn)。

2)替代典型的UBB標(biāo)簽:

我們的目的就是要把成對(duì)的替換成<b></b>下面來(lái)看我們實(shí)現(xiàn)它的模板

(\[b\])(.+)(\[\/b\])

這里用了"(.+)"來(lái)配匹到之間的整個(gè)字符串,在替代的時(shí)候我們要寫(xiě)成這樣

str=checkexp(re,str,"<b>$2</b>")

(注意:checkexp是我自定義的函數(shù),將在后面給出。這個(gè)函數(shù)將把按照我們提供的模板進(jìn)行替代。)

也許你會(huì)問(wèn)這里出現(xiàn)一個(gè)"$2"是什么東東,呵注意了這個(gè)$2可是很重要的,它代表了"(.+)"所配匹的整個(gè)字符串。

為什么是$2而不是$1、$3呢?因?yàn)?1代表(\[b\])所匹配的""字符串,$3代表(\[\/b\])所匹配的""字符串,顯然這里我們需要的是$2而不

是$1$3。


三、UBB正則表達(dá)模板實(shí)例

下面是我寫(xiě)的一個(gè)UBB函數(shù),這個(gè)函數(shù)基本上能使你的論壇成為一個(gè)優(yōu)秀的UBB代碼論壇了。當(dāng)然,通過(guò)改進(jìn)后,你可以得到一個(gè)更強(qiáng)大的U

BB論壇。

代碼片段:
Function ReThestr(face,str) 
dim re,str 
re="\>" 
str=checkexp(re,str,">") 
re="\<" 
str=checkexp(re,str,"") 
re="\n\r\n/" 
str=checkexp(re,str,"<P>") 
re=chr(32) 
str=checkexp(re,str," ")  
re="\r" 
str=checkexp(re,str," ") 
re="\[img\]((http:(\/\/|\\\\)){1}((\w)+[.]){1,3}_ 
(net|com|cn|org|cc|tv)(((\/[\~]*|\\[\~]*) 
(\w)+)|[.](\w)+)*(\w)+[.]{1}(gif|jpg|png))\[\/img\]" ''查找圖片地址 
str=checkexp(re,str," <img src=''$1''> ") 
re="\[w\](http:(\/\/|\\\\)((\w)+[.]){1,}_ 
(net|com|cn|org|cc|tv)(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)* 
(((([?](\w)+){1}[=]*))*((\w)+){1}([\](\w)+[\=](\w)+)*)*)\[\/w\]" ''查找?guī)刂?nbsp;
str=checkexp(re,str,"<iframe width=''300'' height=''300'' src=''$1''></iframe>") 
re="([^(''>)])(<br>)*((http|https|ftp):_ 
(\/\/|\\\\)((\w)+[.]){1,}(net|com|cn|org|cc|tv|_ 
([0-9]{1,3}))(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)*_ 
(((([?](\w)+){1}[=]*))*((\w)+){1}([\](\w)+[\=](\w)+)*)*)" ''查找鏈接地址 
str=checkexp(re,str,"$1$2 <a href=''$3'' target=_blank>$3</a> ") 
re="([^(http://|http:\\)])((www|cn)[.](\w)+[.]{1,}_ 
(net|com|cn|org|cc)(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)* 
(((([?](\w)+){1}[=]*))*((\w)+){1}([\](\w)+[\=](\w)+)*)*) 
" ''查找不以http://開(kāi)頭的地址 
str=checkexp(re,str,"$1 <a href=''http://$2'' target=_blank>$2</a> ") 
re="([^(=)])((\w)+[@]{1}((\w)+[.]){1,3}(\w)+)" ''查找郵件地址 
str=checkexp(re,str," <a href=''mailto:$2''>$2</a> ") 
re="\[color=(((\w)+)|][#][0-F]{6})\]((.)+)\[\/color\]" ''替換字體色彩 
str=checkexp(re,str,"<font color=''$1''>$4</font>") 
re="\[size=(][0-9]{1})\]((.)+)\[\/size\]" ''替換字體大小 
str=checkexp(re,str,"<font size=''$1''>$2</font>") 
re="\[font=((.)+){1,3}\]((.)+)\[\/font\]" ''替換字體 
str=checkexp(re,str,"<font face=''$1''>$3</font>") 
re="(\[b\])(.+)(\[\/b\])" ''加粗字體 
str=checkexp(re,str,"<b>$2</b>") 
re="(\[u\])(.+)(\[\/u\])" ''下畫(huà)線 
str=checkexp(re,str,"<u>$2</u>") 
re="(\[li\])(.+)(\[\/li\])" ''列表 
str=checkexp(re,str,"<li>$2</li>") 
re="(\[QUOTE\])(.+)(\[\/QUOTE\])" ''引用 
str=checkexp(re,str,"_ 
<BLOCKQUOTE>引用:<HR SIZE=1>$2<HR SIZE=1></BLOCKQUOTE>") 
re="\[@]{1}((\w)+[.]){1,3}(\w)+)\](.+)(\[\/email\])" ''郵件 
str=checkexp(re,str,"<a href=mailto:$1>$6</a>") 
re="(\[center\])(.+)(\[\/center\])" ''居中 
str=checkexp(re,str,"<center>$2</center>") 
re="fuck" 
str=checkexp(re,str,"***") 
re="操" 
str=checkexp(re,str,"***") 
re="sex" 
str=checkexp(re,str,"***")  
re="TMD" 
str=checkexp(re,str,"***") 
re="shit" 
str=checkexp(re,str,"***") 
ReThestr=str 
end function
您可能感興趣的文章:
  • asp.net HttpWebRequest自動(dòng)識(shí)別網(wǎng)頁(yè)編碼
  • Asp.net XMLHTTP封裝類(lèi)(GET,Post發(fā)送和接收數(shù)據(jù))
  • 運(yùn)行asp.net時(shí)出現(xiàn) http錯(cuò)誤404-文件或目錄未找到
  • Javascript+XMLHttpRequest+asp.net無(wú)刷新讀取數(shù)據(jù)庫(kù)數(shù)據(jù)
  • asp.net利用HttpModule實(shí)現(xiàn)防sql注入
  • asp.net 模擬提交有文件上傳的表單(通過(guò)http模擬上傳文件)
  • asp頁(yè)面提示Response 對(duì)象 錯(cuò)誤 ASP 0156 : 80004005 HTTP 頭錯(cuò)誤
  • Asp WinHttp.WinHttpRequest.5.1 對(duì)象使用詳解 偽造 HTTP 頭信息
  • asp中利用xmlhttp抓取網(wǎng)頁(yè)內(nèi)容的代碼
  • Asp 使用 Microsoft.XMLHTTP 抓取網(wǎng)頁(yè)內(nèi)容并過(guò)濾需要的
  • asp中使用MSXML2.ServerXMLHTTP實(shí)現(xiàn)異步請(qǐng)求例子
  • 解決ASP中http狀態(tài)跳轉(zhuǎn)返回錯(cuò)誤頁(yè)的問(wèn)題

標(biāo)簽:家電維修 咸陽(yáng) 麗江 泰州 昌都 鐵嶺 溫州 昆明

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用asp+xmlhttp編寫(xiě)web采集程序》,本文關(guān)鍵詞  用,asp+xmlhttp,編寫(xiě),web,采集,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用asp+xmlhttp編寫(xiě)web采集程序》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于用asp+xmlhttp編寫(xiě)web采集程序的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章