建站常識
網(wǎng)站靜態(tài)頁面生成及網(wǎng)站數(shù)據(jù)采集的攻防
2006-12-14 09:18:00
本著互聯(lián)網(wǎng)共享主義精神,特寫此文獻給建站新手,授人以魚,不如授人以漁,本文所講的只是方法和原理,希望大家看完此文,能夠從中得到些幫助和啟發(fā)。
本文從一個ASP程序員的角度用大量實例祥細介紹了動態(tài)網(wǎng)站如何生成靜態(tài)頁面原理,又從一個采集程序開發(fā)者的角度去祥細介紹了網(wǎng)站數(shù)據(jù)采集的原理及功防策略。
關(guān)于網(wǎng)站生成靜態(tài)頁面,為了讓本文讀者容易理解,文內(nèi)列舉了目前常用的多種生成靜態(tài)頁面的方法,其中用了很多的實例代碼進行說明。
關(guān)于網(wǎng)站數(shù)據(jù)采集攻防,作者本身是一個采集程序的開發(fā)者,同時作者也收集研究了多種采集程序,列舉了目前國內(nèi)比較流行的幾種防采集策略,并對每種策略作了簡單客觀的分析評價,希望能給廣大站長們提供一些幫助。此章節(jié)也把作者原創(chuàng)的防采集方法奉獻給大家,目地是為了讓大家了解,防采集,不防搜索引擎,是可行的,有效的。
聲明:希望各位朋友轉(zhuǎn)載時,不要把原有作者版權(quán)去掉,謝謝合作。
由于本人寫作水平有限,寫的不好的地方,還請大家多多包涵,如要批評或意見,請加我QQ。
目前很多人都開始注重動態(tài)頁面生成HTML頁了,但選擇哪種生成HTML的方法和防采集卻不防搜索引擎的問題卻經(jīng)常困擾大家。解決此問題則是本文產(chǎn)生的原因。
首先祥細說一下常用的幾種生成HTML的方法:
生成HTML方法主要步驟只有兩個:
一、獲取要生成的html文件的內(nèi)容
二、將獲取的html文件內(nèi)容保存為html文件
我在這里主要說明的只是第一步:如何獲取要生成的html文件的內(nèi)容:
目前常用獲取html文件的內(nèi)容的方法有幾下幾種:
1、str="<html標(biāo)記>內(nèi)容</html標(biāo)記>"
str=str&"內(nèi)容數(shù)據(jù)庫讀取內(nèi)容........."
這種方法與是在腳本內(nèi)寫要生成的html內(nèi)容,不太方便預(yù)覽生成頁面的內(nèi)容,無法可視化布局頁面,更改html模板時會更加復(fù)雜。
用這種方法的人很多,但我感覺這種方法是最不方便的。
2、制作單獨的HTML模板頁,動態(tài)的內(nèi)容用特定的字符作為標(biāo)記(如:有人用$title$標(biāo)記為網(wǎng)頁標(biāo)題),用ADODB.Stream或者Scripting.FileSystemObject將其模板內(nèi)容載入,然后再用替換方法把原先定好的標(biāo)記替換為動態(tài)內(nèi)容(如:Replace(載入的模板內(nèi)容,"$title$",rs("title" ) ) )。
3、用XMLHTTP或serverXMLHTTP獲取動態(tài)頁所顯示的HTML內(nèi)容。
#p#我常用的生成html文件的實例:
'-----------------翟振愷(小琦)
'weburl是要獲取的動態(tài)頁地址
'getHTTPPage(weburl)是獲取動態(tài)頁內(nèi)容的函數(shù)
weburl="http://"&Request.ServerVariables("SERVER_NAME")&"/contact.asp?id="&rs("id")&""‘指定動態(tài)頁地址
body=getHTTPPage(weburl)'用函數(shù)取到動態(tài)頁地址的內(nèi)容
'-----------------翟振愷(小琦)
此方法最大的好處就是不用費力氣專門去寫靜態(tài)的模板頁面,只是將原來就有的動態(tài)頁面轉(zhuǎn)換為HTML靜態(tài)頁面,但生成速度不是太快。
我常用的生成HTML的方法就是第3種:用XMLHTTP獲取動態(tài)頁生成的HTML內(nèi)容,再用ADODB.Stream或者Scripting.FileSystemObject保存成html文件。
第二步是生成文件的方法:
ASP里常用的有用ADODB.Stream生成文件和Scripting.FileSystemObject生成文件兩種
1、Scripting.FileSystemObject生成文件方法:
CODE:[Copy to clipboard]'-----------------翟振愷(小琦)
Set fso = CreateObject("Scripting.FileSystemObject")
File=Server.MapPath("要生成文件路徑和文件名.htm")
Set txt=fso.OpenTextFile(File,8,True)
data1="文件內(nèi)容"用WriteLine方法生成文件
txt.WriteLine data1
data2="文件內(nèi)容"'用Write方法生成文件
txt.Write data2
txt.Close
txt.fso
'-----------------翟振愷(小琦)
2、ADODB.Stream生成文件方法:
Dim objAdoStream
set objAdoStream = Server.createObject("ADODB.Stream")
objAdoStream.Type = 1
objAdoStream.Open()
objAdoStream.Write("文件內(nèi)容")
objAdoStream.SaveToFile 要生成文件路徑和文件名.htm,2
objAdoStream.Close()
'-----------------翟振愷(小琦)
#p#再說一下我對HTML防采集卻不防搜索引擎蜘蛛的一些經(jīng)驗:
我開發(fā)過幾個采集程序,也研究過很多采集程序代碼,所以對采集程序的原理還算是稍微有些了解。
先說一下采集原理:
采集程序的主要步驟如下:
一、獲取被采集的頁面的內(nèi)容
二、從獲取代碼中提取所有用的數(shù)據(jù)
一、獲取被采集的頁面的內(nèi)容
我目前所掌握的ASP常用獲取被采集的頁面的內(nèi)容方法:
1、用serverXMLHTTP組件獲取數(shù)據(jù)
'-----------------翟振愷(小琦)
'創(chuàng)建對象
Dim ObjXMLHTTP
Set ObjXMLHTTP=Server.CreateObject("MSXML2.serverXMLHTTP")
'請求文件,以異步形式
ObjXMLHTTP.Open "GET",weburl,False
ObjXMLHTTP.send
While ObjXMLHTTP.readyState <> 4
ObjXMLHTTP.waitForResponse 1000
Wend
'得到結(jié)果
GetBody=ObjXMLHTTP.responseBody
'釋放對象
Set ObjXMLHTTP=Nothing
'-----------------翟振愷(小琦)
End Function
調(diào)用方法:
GetBody(文件的URLf地址)
2、或XMLHTTP組件獲取數(shù)據(jù)
CODE:[Copy to clipboard]Function GetBody(weburl)
'-----------------翟振愷(小琦)
'創(chuàng)建對象
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", weburl, False, "", ""
.Send
GetBody = .ResponseBody
End With
'釋放對象
Set Retrieval = Nothing
'-----------------翟振愷(小琦)
End Function
調(diào)用方法:
GetBody(文件的URLf地址)
這樣獲取的數(shù)據(jù)內(nèi)容還需要進行編碼轉(zhuǎn)換才可以使用
CODE:[Copy to clipboard]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
#p#二、從獲取代碼中提取所有用的數(shù)據(jù)
目前我掌握的方法有:
1、用ASP內(nèi)置的MID函數(shù)截取需要的數(shù)據(jù)
CODE:[Copy to clipboard]Function body(wstr,start,over)
'-----------------翟振愷(小琦)
start=Newstring(wstr,start)
'設(shè)置需要處理的數(shù)據(jù)的唯一的開始標(biāo)記
over=Newstring(wstr,over)
'和start相對應(yīng)的就是需要處理的數(shù)據(jù)的唯一的結(jié)束標(biāo)記
body=mid(wstr,start,over-start)
'設(shè)置顯示頁面的范圍
'-----------------翟振愷(小琦)
End Function
調(diào)用方法:body(被采集的頁面的內(nèi)容,開始標(biāo)記,結(jié)束標(biāo)記)
2、用正則獲取需要的數(shù)據(jù)
CODE:[Copy to clipboard]Function body(wstr,start,over)
'-----------------翟振愷(小琦)
Set xiaoqi = New Regexp'設(shè)置配置對象
xiaoqi.IgnoreCase = True'忽略大小寫
xiaoqi.Global = True'設(shè)置為全文搜索
xiaoqi.Pattern = "”&start&“.+?”&over&“"'正則表達式
Set Matches =xiaoqi.Execute(wstr)'開始執(zhí)行配置
set xiaoqi=nothing
body=""
For Each Match in Matches
body=body&Match.Value '循環(huán)匹配
Next
'-----------------翟振愷(小琦)
End Function
調(diào)用方法:body(被采集的頁面的內(nèi)容,開始標(biāo)記,結(jié)束標(biāo)記)
采集程序祥細思路:
1、取得網(wǎng)站的分頁列表頁的每頁地址
目前絕大部分動態(tài)網(wǎng)站的分頁地址都有規(guī)則,如:
動態(tài)頁
第一頁:index.asp?page=1
第二頁:index.asp?page=2
第三頁:index.asp?page=3
.....
靜態(tài)頁
第一頁:page_1.htm
第二頁:page_2.htm
第三頁:page_3.htm
.....
取得網(wǎng)站的分頁列表頁的每頁地址,只需要用變量替代每頁地址的變化的字符即可如:page_<%="&page&"%>.htm
2、獲取被采集網(wǎng)站的分頁列表頁內(nèi)容
3、從分頁列表代碼中提取被采集的內(nèi)容頁面的URL連接地址
絕大部分分頁頁面里的內(nèi)容頁連接也有固定規(guī)則,如:
<a href="url1">連接1</a> <br>
<a href="url2">連接2</a> <br>
<a href="url3">連接3</a> <br>
用以下代碼就可以獲得一個URL連接集合
CODE:[Copy to clipboard]'-----------------翟振愷(小琦)
Set xiaoqi = New Regexp
xiaoqi.IgnoreCase = True
xiaoqi.Global = True
xiaoqi.Pattern = ””“.+?”““
Set Matches =xiaoqi.Execute(頁面列表內(nèi)容)
set xiaoqi=nothing
url=""
For Each Match in Matches
url=url&Match.Value
Next
'-----------------翟振愷(小琦)
4、取得被采集的內(nèi)容頁面內(nèi)容,根據(jù)”提取標(biāo)記“從被采集的內(nèi)容頁面分別截取要取得的數(shù)據(jù)
因為是動態(tài)生成的頁面,大多數(shù)內(nèi)容頁面內(nèi)都有相同的html標(biāo)記,我們可以根據(jù)這些有規(guī)則的標(biāo)記提取需要的各個部分的內(nèi)容。
如:
每個頁面都有網(wǎng)頁標(biāo)題,用我上面寫的MID截取函數(shù)就可以獲得之間的值,也可以用正則表達式來獲得。
例:body("","")
介紹完采集器的祥細原理后,就開始說一下防采集的策略。
目前防采集的方法有很多種,先介紹一下常見防采集策略方法和它的弊端及采集對策:
一、判斷一個IP在一定時間內(nèi)對本站頁面的訪問次數(shù),如果明顯超過了正常人瀏覽速度,就拒絕此IP訪問
弊端:
1、此方法只適用于動態(tài)頁面,如:asp\jsp\php等...靜態(tài)頁面無法判斷某個IP一定時間訪問本站頁面的次數(shù)
2、此方法會嚴(yán)重影響搜索引擎蜘蛛對其收錄,因為搜索引擎蜘蛛收錄時,瀏覽速度都會比較快而且是多線程。此方法也會拒絕搜索引擎蜘蛛收錄站內(nèi)文件
采集對策:只能放慢采集速度,或者不采
建議:做個搜索引擎蜘蛛的IP庫,只允許搜索引擎蜘蛛快速瀏覽站內(nèi)內(nèi)容。搜索引擎蜘蛛的IP庫的收集,也不太容易,一個搜索引擎蜘蛛,也不一定只有一個固定的IP地址。
評論:此方法對防采集比較有效,但卻會影響搜索引擎對其收錄。
二、用javascript加密內(nèi)容頁面
弊端:此方法適用于靜態(tài)頁面,但會嚴(yán)重影響搜索引擎對其收錄情況,搜索引擎收到到的內(nèi)容,也都是加密后的內(nèi)容
采集對策:建議不采,如非要采,就把解密碼的JS腳本也采下來。
建議:目前沒有好的改良建議
評論:建議指望搜索引擎帶流量的站長不要使用此方法。
三、把內(nèi)容頁面里的特定標(biāo)記替換為”特定標(biāo)記+隱藏版權(quán)文字“
弊端:此方法弊端不大,僅僅會增加一點點的頁面文件大小,但容易反采集
采集對策:把采集來的含有隱藏版權(quán)文字內(nèi)容的版權(quán)文字替掉,或替換成自己的版權(quán)。
建議:目前沒有好的改良建議
評論:自己感覺實用價值不大,就算是加上隨機的隱藏文字,也等于畫蛇添足。
四、只允許用戶登陸后才可以瀏覽
弊端:此方法會嚴(yán)重影響搜索引擎蜘蛛對其收錄
采集對策:目前落伍已經(jīng)有人發(fā)了對策文章 ,具體對策就看這個吧《ASP小偷程序如何利用XMLHTTP實現(xiàn)表單的提交以及cookies或session的發(fā)送》
建議:目前沒有好的改良建議
評論:建議指望搜索引擎帶流量的站長不要使用此方法。不過此方法防一般的采集程序,還是有點效果的。
五、用javascript、vbscript腳本做分頁
弊端:影響搜索引擎對其收錄
采集對策:分析javascript、vbscript腳本,找出其分頁規(guī)則,自己做個對應(yīng)此站的分頁集合頁即可。
建議:目前沒有好的改良建議
評論:感覺懂點腳本語言的人都能找出其分頁規(guī)則
六、只允許通過本站頁面連接查看,如:Request.ServerVariables("HTTP_REFERER")
弊端:影響搜索引擎對其收錄
采集對策:不知道能不能模擬網(wǎng)頁來源。。。。目前我沒有對應(yīng)此方法的采集對策
建議:目前沒有好的改良建議
#p#評論:建議指望搜索引擎帶流量的站長不要使用此方法。不過此方法防一般的采集程序,還是有點效果的。
從以上可以看出,目前常用的防采集方法,要么會對搜索引擎收錄有較大影響,要么防采集效果不好,起不到防采集的效果。那么,還有沒有一種有效防采集,而又不影響搜索引擎收錄的方法呢?那就請繼續(xù)往下看吧,精彩的地方馬上呈獻給大家。
下面就是我的防采集策略,防采集而又不防搜索引擎
從前面的我講的采集原理大家可以看出,絕大多數(shù)采集程序都是靠分析規(guī)則來進行采集的,如分析分頁文件名規(guī)則、分析頁面代碼規(guī)則。
一、分頁文件名規(guī)則防采集對策
大部分采集器都是靠分析分頁文件名規(guī)則,進行批量、多頁采集的。如果別人找不出你的分頁文件的文件名規(guī)則,那么別人就無法對你的網(wǎng)站進行批量多頁采集。
實現(xiàn)方法:
我認(rèn)為用MD5加密分頁文件名是一個比較好的方法,說到這里,有人會說,你用MD5加密分頁文件名,別人根據(jù)此規(guī)則也可以模擬你的加密規(guī)則得到你的分頁文件名。
我要指出的是我們加密分頁文件名時,不要只加密文件名變化的部分
如果I代表分頁的頁碼,那么我們不要這樣加密
page_name=Md5(I,16)&".htm"
最好給要加密的頁碼上再跟進一個或多個字符,如:page_name=Md5(I&"任意一個或幾個字母",16)&".htm"
因為MD5是無法反解密的,別人看到的會頁字母是MD5加密后的結(jié)果,所以加人也無法知道你在 I 后面跟進的字母是什么,除非他用暴力****MD5,不過不太現(xiàn)實。
二、頁面代碼規(guī)則防采集對策
如果說我們的內(nèi)容頁面無代碼規(guī)則,那么別人就無法從你的代碼中提取他們所需要的一條條內(nèi)容。
所以我們要的這一步做到防采集,就要使代碼無規(guī)則。
實現(xiàn)方法:
使對方需要提取的標(biāo)記隨機化
1、定制多個網(wǎng)頁模板,每個網(wǎng)頁模板里的重要HTML標(biāo)記不同,呈現(xiàn)頁面內(nèi)容時,隨機選取網(wǎng)頁模板,有的頁面用CSS+DIV布局,有的頁面用table布局,此方法是麻煩了點,一個內(nèi)容頁面,要多做幾個模板頁面,不過防采集本身就是一件很煩瑣的事情,多做一個模板,能起到防采集的作用,對很多人來說,都是值得的。
2、如果嫌上面的方法太麻煩,把網(wǎng)頁里的重要HTML標(biāo)記隨機化,也可以。
做的網(wǎng)頁模板越多,html代碼越是隨機化,對方分析起內(nèi)容代碼時,就越麻煩,對方針對你的網(wǎng)站專門寫采集策略時,難度就更大,在這個時候,絕大部分人,都會知難而退,因為這此人就是因為懶,才會采集別人網(wǎng)站數(shù)據(jù)嘛~~~再說一下,目前大部分人都是拿別人開發(fā)的采集程序去采集數(shù)據(jù),自己開發(fā)采集程序去采集數(shù)據(jù)的人畢竟是少數(shù)。
還有些簡單的思路提供給大家:
1、把對數(shù)據(jù)采集者重要,而對搜索引擎不重要的內(nèi)容用客戶端腳本顯示
2、把一頁數(shù)據(jù),分為N個頁面顯示,也是加大采集難度的方法
3、用更深層的連接,因為目前大部分采集程序只能采集到網(wǎng)站內(nèi)容的前3層,如果內(nèi)容所在的連接層更深,也可以避免被采集。不過這樣可能會給客戶造成瀏覽上的不便。
如:
大多網(wǎng)站都是 首頁----內(nèi)容索引分頁----內(nèi)容頁
如果改成:
首頁----內(nèi)容索引分頁----內(nèi)容頁入口----內(nèi)容頁
注:內(nèi)容頁入口最好能加上自動轉(zhuǎn)入內(nèi)容頁的代碼
其實,只要做好防采集的第一步(加密分頁文件名規(guī)則),防采集的效果就已經(jīng)不錯了,還是建議兩條反采集方法同時使用,給采集者增加采集難度,使得他們知難頁退。
至此,全文完,歡迎大家在此討論與此相關(guān)技術(shù),謝謝!
近期更新
- [2023-06-25 23:22:29] 優(yōu)秀網(wǎng)站設(shè)計的五大特點
- [2023-04-27 14:05:55] Html 5 響應(yīng)式網(wǎng)站設(shè)計制作
- [2023-04-10 11:07:30] 網(wǎng)站建設(shè)制作流程知多少
- [2022-10-14 10:11:30] 做網(wǎng)站設(shè)計應(yīng)該更看重框架搭建還是視覺觀感?
- [2022-08-09 15:57:48] 以“產(chǎn)品”思維搭建網(wǎng)站!
- [2022-08-08 09:12:57] 一家公司的網(wǎng)站應(yīng)該有哪些板塊內(nèi)容?
- [2022-08-05 09:28:06] 企業(yè)網(wǎng)站建設(shè)為什么要設(shè)置新聞板塊?
- [2022-07-04 15:58:06] 網(wǎng)站首頁設(shè)計的好看,這個網(wǎng)站就成功了一大半!
- [2022-05-20 09:34:19] 網(wǎng)站后臺管理系統(tǒng)是什么?有什么作用?
- [2022-05-17 11:29:32] 作為消費者,應(yīng)該如何選擇一家水平高的網(wǎng)站建設(shè)公司
- [2022-05-17 11:27:01] 高端網(wǎng)站定制與模板化網(wǎng)站應(yīng)該怎么選擇?
- [2022-04-22 16:00:41] 現(xiàn)在高端的網(wǎng)站設(shè)計都有哪些新的趨勢?
延伸閱讀
- [2007-12-17 13:36:00] “永久鏈接”的可用性問題
- [2007-11-01 12:07:00] 網(wǎng)站設(shè)計點評之郁金香之旅
- [2017-02-17 10:51:00] 三星Note7手機爆炸的原因
- [2016-12-29 14:53:00] 大數(shù)據(jù)或?qū)⒂瓉砭蚪鹆紮C——智線發(fā)力短視頻營銷
- [2010-02-26 21:52:00] 交互設(shè)計(10)—別讓我思考
- [2006-06-23 14:01:00] 商業(yè)Web站點設(shè)計策略
- [2020-09-14 09:54:08] 在青島,企業(yè)網(wǎng)站建設(shè)對企業(yè)有哪些作用?
- [2006-01-08 20:54:00] 網(wǎng)頁藝術(shù)設(shè)計初步探討
- [2009-05-21 22:25:00] 我們在路上—QQ旋風(fēng)2設(shè)計歷程
- [2006-10-25 11:18:00] 程序員,你該為web2.0做些什么?
- [2012-05-14 22:06:58] 網(wǎng)站交互設(shè)計-探源
- [2012-08-08 13:37:22] 網(wǎng)站設(shè)計制作前的準(zhǔn)備-線性框架設(shè)計
解決方案
輪胎行業(yè)網(wǎng)站設(shè)計解決方案 機械行業(yè)網(wǎng)站設(shè)計解決方案 房地產(chǎn)行業(yè)網(wǎng)站設(shè)計解決方案 科技企業(yè)網(wǎng)站設(shè)計解決方案 電子家電網(wǎng)站設(shè)計解決方案 食品行業(yè)網(wǎng)站設(shè)計解決方案 集團公司網(wǎng)站設(shè)計解決方案 企事業(yè)單位網(wǎng)站設(shè)計解決方案 外貿(mào)行業(yè)網(wǎng)站設(shè)計解決方案 健身運動網(wǎng)站設(shè)計解決方案 美容與化妝品網(wǎng)站設(shè)計解決方案 建筑設(shè)計行業(yè)網(wǎng)站設(shè)計解決方案 物流行業(yè)網(wǎng)站設(shè)計解決方案
TAGS關(guān)鍵字
官網(wǎng)網(wǎng)站建設(shè) H5專題頁面 SEO優(yōu)化 網(wǎng)站動畫 輪胎網(wǎng)站設(shè)計 青島高端網(wǎng)站設(shè)計公司哪家好 良好的導(dǎo)航 青島網(wǎng)站制作 營銷型網(wǎng)站建設(shè) 力圖數(shù)字科技 企業(yè)網(wǎng)站設(shè)計 微信營銷的優(yōu)勢 青島網(wǎng)頁設(shè)計 搜索引擎蜘蛛 青島好的網(wǎng)站優(yōu)化公司 css 微網(wǎng)站 官網(wǎng)建設(shè) 頁面設(shè)計 青島SEO 微官網(wǎng) 交互設(shè)計 微信開發(fā) 青島IT資訊 html和css 高端網(wǎng)站設(shè)計 舒適的界面 網(wǎng)站規(guī)劃 網(wǎng)站策劃 蘋果系統(tǒng)