国产亚洲精品自拍,亚洲va在线va天堂va不卡下载,亚洲av中文无码字幕色本,国产精品久久国产精品},韩国激情一区二区无码在线},亚洲人成网站www

信息動態(tài)

網(wǎng)站設(shè)計是技術(shù)與創(chuàng)意的完美融合!

建站常識

網(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>

#p#

  用以下代碼就可以獲得一個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ù),謝謝!

0532-85810878 473587358 掃碼添加微信

掃碼添加微信

掃碼關(guān)注公眾號

官方公眾號

2054585360
姜堰市| 阿勒泰市| 郯城县| 博白县| 睢宁县| 龙门县| 伊通| 延吉市| 离岛区| 平潭县| 岚皋县| 拜城县| 西昌市| 奉贤区| 银川市| 锡林郭勒盟| 新津县| 和静县| 桐城市| 金塔县| 岳阳县| 新绛县| 马公市| 龙岩市| 凤翔县| 莲花县| 平湖市| 五原县| 台中市| 福清市| 上蔡县| 建瓯市| 额尔古纳市| 碌曲县| 海兴县| 东源县| 扎赉特旗| 乌鲁木齐市| 二连浩特市| 舞钢市| 太仆寺旗|