做一個好的教程就是要讓人看懂,我早先買教程書看到第一章千篇一律都是計算機發(fā)展史再加歷史回顧和前景展望,煩死。
所以本教程就不講一些沒用的東西了,直接轉(zhuǎn)入正題
ASP采集其它就是利用微軟自帶的XMLHTTP組件取得遠程頁面的源代碼,再經(jīng)過程序的過濾替換處理轉(zhuǎn)換成我們想要的數(shù)據(jù)。我們也不管用什么,反正我教你的就是用一段代碼取得目標代碼, 再把目標代碼加工一下。然后直接顯示啊還是寫入數(shù)據(jù)庫。就這么簡單!
引用組件CreateObject("Microsoft.XMLHTTP") --->取得目標代碼(get) ---> 數(shù)據(jù)處理(截取,過濾,替換) ---> 直接顯示(小偷)或 寫入數(shù)據(jù)庫(采集)
說了這么多是要開始實戰(zhàn)了.
二話不說,先寫個剛剛講到的引用組件和取得代碼的函數(shù)
' 獲取遠程HTML
Function GetURL(url)
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "GET", url, False
.Send
GetURL = .responsebody
if len(.responsebody)<100 then
response.write "獲取遠程文件 <a href="&url&" target=_blank>"&url&"</a> 失敗。"
response.end
end if
End With
Set Retrieval = Nothing
End Function
上面這段函數(shù)的URL值就是我們的目標網(wǎng)頁,也就是要偷的頁面了。
當然我們得到的代碼是以二進制返回給我們的,那我們得把他轉(zhuǎn)換成我們要的字符,怎么辦?
怕什么?我自己不會寫難道還不會上網(wǎng)找啊。找到了,怎么實現(xiàn)的我們當然不管它了,只要能用就行了,函數(shù)代碼如下:
' 二進制轉(zhuǎn)字符串
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
OK!
有了這兩個函數(shù)基本上可以實現(xiàn)簡單的小偷了。
我今天就找天空的軟件資訊開刀,地址是: http://www.skycn.com/article/index_article.html
開工:
1,建立一個ASP文件,我建的是index.asp
<%
%>
先寫好啊,要養(yǎng)成這樣的習慣哦。
定義一下地址和調(diào)用函數(shù)
dim url,html
url=" Html=GetURL(url) '把地址url傳遞到GetURL這個函數(shù)
Html=Bytes2BStr(Html) '二進制轉(zhuǎn)換成字符一下
再把剛剛兩個函數(shù)寫進去
最后看一下是否偷到了,我們response一下
Response.write html
整個文件內(nèi)容就是:
<%
On Error Resume Next
Server.ScriptTimeOut=9999999
dim url,html
url=" Html=GetURL(url) '把地址url傳遞到GetURL這個函數(shù)
Html=Bytes2BStr(Html) '二進制轉(zhuǎn)換成字符一下
' 獲取遠程HTML
Function GetURL(url)
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "GET", url, False
.Send
GetURL = .responsebody
if len(.responsebody)<100 then
response.write "獲取遠程文件 <a href="&url&" target=_blank>"&url&"</a> 失敗。"
response.end
end if
End With
Set Retrieval = Nothing
End Function
' 二進制轉(zhuǎn)字符串
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
Response.write html
%>
上次說到哪了?好像只說到如何得到目標地址并得到代碼和顯示出來。這樣得到的當然是不能用的了。我們現(xiàn)在
就來學一下把得到的數(shù)據(jù)做一個最基本的數(shù)據(jù)處理吧.
OK!開始!
那天剛好在站長站里看到有個人想要一個殺毒軟件的小偷頁面,說是要丁香魚的瑞星更新小偷(怎么不來找我呢,有時間給你寫一個嘛
不過你只要看了我的教程,以后不要說丁香魚了,其它的魚一樣偷),那我們就把丁香魚拿來開刀。
丁香魚網(wǎng)址:Function GetURL(url)
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "GET", url, False
.Send
GetURL = .responsebody
if len(.responsebody)<100 then
response.write "獲取遠程文件 <a href="&url&" target=_blank>"&url&"</a> 失敗。"
response.end
end if
End With
Set Retrieval = Nothing
End Function
' 二進制轉(zhuǎn)字符串
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
Function getcontent(HTML,starcode,endcode)
dim StartPos,EndPos,Length
StartPos=Instr(1,HTML,starcode)
EndPos=Instr(StartPos,HTML,endcode)
Length=EndPos-StartPos
getcontent=Mid(HTML,StartPos,Length)
End Function
%>
前面兩個函數(shù)我就不講了,講一下getcontent,這個函數(shù)的作用就是截取我們想要的代碼,就叫截取吧。
解釋一下里面用到的VB函數(shù)
Instr:
返回某字符串在另一字符串中第一次出現(xiàn)的位置(vb script沒學好的要抓緊補啊同志們) 。
Mid:
從字符串中返回指定數(shù)目的字符。
這樣大家就比較好理解了吧,html是我們得到的網(wǎng)頁整個源碼,starcode是我們要截取的代碼開始,endcode自然就是我們要截取的結束了
我們先通過starcode和endcode來指定我們要截取的位置,再用mid取出來。上面講的都是理論的
等下通過實際的應用我們會更好理解的。
---------------
建一個ASP文件rising.asp作為小偷的主文件。記不記得上次得到源碼的幾個代碼,現(xiàn)在可以用上了。
rising.asp:
<!-- #include file="function.asp" -->
<%
On Error Resume Next
Server.ScriptTimeOut=9999999
dim url,html,starcode,endcode
url=" Html=GetURL(url) '把地址url傳遞到GetURL這個函數(shù)
Html=Bytes2BStr(HTML) '二進制轉(zhuǎn)換成字符一下
starcode="<td><div align=""center""></div></td>" '我們并不是偷網(wǎng)頁的全部,因為前面的東西我們不要嘛,所以從這里開始,代碼不能重復哦
endcode="<td colspan=""2""><div align=""center"">"'和上面一樣,我們尾部也不要,這里是結束的部分,代碼要唯一,我們要的就是上面和這里的中間部分
content=getcontent(HTML,starcode,endcode) '賦值完畢了我們就調(diào)用一下這個函數(shù),等于是參數(shù)傳遞一下
content=replace(content,"images/","這里是另外一個替換操作,下面給你們講
Response.write content '輸出內(nèi)容
%>
主要說一下
replace:
返回字符串,其中指定數(shù)目的某子字符串被替換為另一個子字符串。
這個就是把代碼中我們不想要的換成我們想要的,或直接換成空,下面是一個例子
Dim MyString
MyString = Replace("XXpXXPXXp", "p", "Y") '二進制比較從字符串左端開始。返回 "XXYXXPXXY"。
上面XXpXXPXXp的p就被換成了Y吧,如果換成空:
MyString = Replace("XXpXXPXXp", "p", "") '二進制比較從字符串左端開始。返回 "XXXXPXX"。
那上面XXpXXPXXp的p就不見了。簡單吧。
我們例子里因為有圖片,路徑如果不處理一下,圖片就無法正常顯示,所以我們把"images/"換成了"還有哦,他們里面有一個引用javescript,我們在rising.asp的最前面也引用一下,是關于版本的
<script language=javascript src=">
OK!我看一下效果哦。
好了,成功了。第二課也講完了,你們可以去試試其它頁面啊,或可以用這幾個函數(shù)取不同的值來練練手。
好了,等第三課吧
官方 演示(為了配合樣式,我加了頁頭和頁尾了)
http://www.crxb.com/rising.asp 【摘自網(wǎng)絡】