如何防止網站被爬蟲爬取的幾種辦法

來源:互聯網
上載者:User

今天想對一個問題進行分析和討論,就是關於爬蟲對網站頁面爬取的問題,有些網站通過爬蟲去採集其它的網站頁面資訊作為己用,大量的爬取行為會對web伺服器有比較效能有影響,主要的表現就是會變得很慢。

對於如何防止網站被爬取,我想從以下幾種方法去分析:

1.基於程式本身去防止爬取:作為爬蟲程式,爬取行為是對頁面的源檔案爬取,如爬取靜態頁面的html代碼,可以用jquery去模仿寫html,這種方法偽裝的頁面就很難被爬取了,不過這種方法對程式員的要求很高。

2.基於iptables和shell指令碼:可以對nginx的access.log進行策略定義,例如定義在1分鐘內並發串連數超過30個ip為非法,如ip不在白名單內,則加入iptables策略封掉,當然這種的缺點是會有“誤傷”,策略細粒度越小就會有更多的“誤傷”,細粒度大就會使效果變差,另外還有類似的第三方工具fail2ban,利用做filter和actor對一些有危害的操作記錄或是封ip。但是對於某個特定的爬蟲地址例如網易、有道)的爬取行為拒絕也很難準確做到,因為你無法準確知道這些特定的爬蟲ip地址例如網易、有道),以下是我的定位方式,不過發現由於ip庫不準確造成錯誤的屏蔽。注意:建議不要用封ip條目的方式,iptables列表長度是65535時就會封滿,伺服器也就會死機。

650) this.width=650;" title="zhi.jpg" alt="111812892.jpg" src="http://www.bkjia.com/uploads/allimg/131227/1620594N1-0.jpg" />

指令碼如下:

#! /bin/bashLOGFILE=/var/log/nginx/access.logPREFIX=/etc/spiders#日誌中大部分蜘蛛都有spider的關鍵字,但是百度的不能封,所以過濾掉百度grep 'spider' $LOGFILE |grep -v 'Baidu' |awk '{print $1}' >$PREFIX/ip1.txt# 封掉網易的有道grep 'YoudaoBot' $LOGFILE  | awk '{print $1}' >>$PREFIX/ip1.txt#封掉雅虎grep 'Yahoo!' $LOGFILE  | awk '{print $1}' >>$PREFIX/ip1.txt# 過濾掉信任IPsort -n $PREFIX/ip1.txt |uniq  |sort |grep -v '192.168.0.' |grep -v '127.0.0.1'>$PREFIX/ip2.txt# 如果一小時內,發包不超過30個就要解鎖/sbin/iptables -nvL |awk '$1 <= 30 {print $8}' >$PREFIX/ip3.txtfor ip in `cat $PREFIX/ip3.txt`; do /sbin/iptables -D INPUT -s $ip -j DROP ; done/sbin/iptables -Z // 將iptables計數器置為0for ip in `cat $PREFIX/ip2.txt`; do /sbin/iptables -I INPUT -s $ip -j DROP ; done

3.使用robots.txt檔案:例如阻止所有的爬蟲爬取,但是這種效果不是很明顯。

User-agent: *Disallow: /

4.使用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;}

注意文法:~*表示是大小寫不敏感,~表示是大小寫敏感

本文出自 “老徐的私房菜” 部落格,謝絕轉載!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.