最常規的防止網頁被搜索引擎收錄的方法是使用robots.txt,可是這樣作的弊端是要將全部已知的搜索引的爬蟲信息都羅列進去,不免有疏漏。php
分析:沒有哪一個常人一秒鐘內能訪問相同網站5次,除非是程序訪問,而有這種喜愛的,就剩下搜索引擎爬蟲和討厭的採集器了。
弊端:一刀切,這一樣會阻止搜索引擎對網站的收錄
適用網站:不太依靠搜索引擎的網站
採集器會怎麼作:減小單位時間的訪問次數,減低採集效率css
分析:經過後臺計數器,記錄來訪者ip和訪問頻率,人爲分析來訪記錄,屏蔽可疑Ip。
弊端:彷佛沒什麼弊端,就是站長忙了點
適用網站:全部網站,且站長可以知道哪些是google或者百度的機器人
採集器會怎麼作:打游擊戰唄!利用ip代理採集一次換一次,不過會下降採集器的效率和網速(用代理嘛)。html
Note:這個方法我沒接觸過,只是從別處看來
分析:不用分析了,搜索引擎爬蟲和採集器通殺
適用網站:極度討厭搜索引擎和採集器的網站
採集器會這麼作:你那麼牛,都豁出去了,他就不來採你了nginx
分析:雖然不能防止採集,可是會讓採集後的內容充滿了你網站的版權說明或者一些垃圾文字,由於通常採集器不會同時採集你的css文件,那些文字沒了風格,就顯示出來了。
適用網站:全部網站
採集器會怎麼作:對於版權文字,好辦,替換掉。對於隨機的垃圾文字,沒辦法,勤快點了。vim
分析:搜索引擎爬蟲不會對每一個這樣類型的網站設計登陸程序。據說採集器能夠針對某個網站設計模擬用戶登陸提交表單行爲。
適用網站:極度討厭搜索引擎,且想阻止大部分採集器的網站
採集器會怎麼作:製做擬用戶登陸提交表單行爲的模塊ide
分析:仍是那句,搜索引擎爬蟲不會針對各類網站的隱藏分頁進行分析,這影響搜索引擎對其收錄。可是,採集者在編寫採集規則時,要分析目標網頁代碼,懂點腳本知識的人,就會知道分頁的真實連接地址。
適用網站:對搜索引擎依賴度不高的網站,還有,採集你的人不懂腳本知識
採集器會怎麼作:應該說採集者會怎麼作,他反正都要分析你的網頁代碼,順便分析你的分頁腳本,花不了多少額外時間。網站
分析:asp和php能夠經過讀取請求的HTTP_REFERER屬性,來判斷該請求是否來自本網站,從而來限制採集器,一樣也限制了搜索引擎爬蟲,嚴重影響搜索引擎對網站部分防盜鏈內容的收錄。
適用網站:不太考慮搜索引擎收錄的網站
採集器會怎麼作:假裝HTTP_REFERER嘛,不難。搜索引擎
分析:對搜索引擎爬蟲和採集器支持性很差,這個不少懂點seo的人都知道
適用網站:媒體設計類而且不在乎搜索引擎收錄的網站
採集器會怎麼作:不採了,走人google
分析:由於採集器是根據網頁結構來定位所須要的內容,一旦前後兩次模版更換,採集規則就失效,不錯。並且這樣對搜索引擎爬蟲沒影響。
適用網站:動態網站,而且不考慮用戶體驗。
採集器會怎麼作:一個網站模版不可能多於10個吧,每一個模版弄一個規則就好了,不一樣模版採用不一樣採集規則。若是多於10個模版了,既然目標網站都那麼費勁的更換模版,成全他,撤。加密
分析:這個比較變態。考慮到html標籤內含空格和不含空格效果是同樣的,因此< div >和< div >對於頁面顯示效果同樣,可是做爲採集器的標記就是兩個不一樣標記了。若是每次頁面的html標籤內空格數隨機,那麼
採集規則就失效了。可是,這對搜索引擎爬蟲沒多大影響。
適合網站:全部動態且不想遵照網頁設計規範的網站。
採集器會怎麼作:仍是有對策的,如今html cleaner仍是不少的,先清理了html標籤,而後再寫採集規則;應該用採集規則前先清理html標籤,仍是可以拿到所需數據。
使用nginx的自帶功能:經過對httpuseragent阻塞來實現,包括GET/POST方式的請求,以nginx爲例,具體步驟以下:
編輯nginx.conf
#vim /usr/local/nginx/conf/nginx.conf
拒絕以wget方式的httpuseragent,增長以下內容
## Block http user agent - wget ##
if ($http_user_agent ~* (Wget) ) {
return 403;
}
## Block Software download user agents ##
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}
平滑啓動
# /usr/local/nginx/sbin/nginx -s reload
如何拒絕多種httpuseragent,內容以下:
if ($http_user_agent ~ (agent1|agent2|Foo|Wget|Catall Spider|AcoiRobot) ) {
return 403;
}
大小寫敏感匹配
### 大小寫敏感http user agent拒絕###
if ($http_user_agent ~ (Catall Spider|AcoiRobot) ) {
return 403;
}
### 大小寫不敏感http user agent拒絕###
if ($http_user_agent ~* (foo|bar) ) {
return 403;
}
注意:以上if(與http間的\是轉義用的,若不用MarkDown會把內容用於調整格式,實際編寫文件時應去掉該反斜槓;