如何避免搜索引擎爬虫产生的流量过大以及搜索引擎设置优化
轉(zhuǎn)載自:http://www.qiexing.com/post/web-seach-spider.html
?
今天卻收到了虛擬主機(jī)商的報(bào)告:說(shuō)當(dāng)月流量已經(jīng)超出15G!
登錄到后臺(tái)的統(tǒng)計(jì)才發(fā)現(xiàn),正常的網(wǎng)站瀏覽產(chǎn)生的流量才1G多,而搜索引擎爬蟲(chóng)(也稱(chēng)蜘蛛:spider等)產(chǎn)生的流量卻達(dá)14G之多!有圖為證:
為什么會(huì)搜索引擎爬蟲(chóng)會(huì)產(chǎn)生這么大的流量,特別是搜狗的爬蟲(chóng)與bspider爬蟲(chóng)真是大的驚人,但卻不能為網(wǎng)站帶來(lái)流量。從統(tǒng)計(jì)中看到網(wǎng)站的大多數(shù)流量是來(lái)自百度與谷歌兩個(gè)搜索引擎,因此決定修改robots.txt文件,屏蔽其它搜索引擎爬蟲(chóng)。
從網(wǎng)上查看到的方法與格式,不知道正確與否,帖出來(lái)給大家看看,如有錯(cuò)誤請(qǐng)指正:
User-agent: Googlebot
# Directories
Disallow: /includes/
Disallow: /misc/
Disallow: /modules/
Disallow: /profiles/
Disallow: /scripts/
Disallow: /sites/
Disallow: /themes/
# Files
Disallow: /CHANGELOG.txt
Disallow: /cron.php
Disallow: /INSTALL.mysql.txt
Disallow: /INSTALL.pgsql.txt
Disallow: /install.php
Disallow: /INSTALL.txt
Disallow: /LICENSE.txt
Disallow: /MAINTAINERS.txt
Disallow: /update.php
Disallow: /UPGRADE.txt
Disallow: /xmlrpc.php
# Paths (clean URLs)
Disallow: /admin/
Disallow: /comment/reply/
Disallow: /contact/
Disallow: /logout/
Disallow: /node/add/
Disallow: /search/
Disallow: /user/register/
Disallow: /user/password/
Disallow: /user/login/
# Paths (no clean URLs)
Disallow: /?q=admin/
Disallow: /?q=comment/reply/
Disallow: /?q=contact/
Disallow: /?q=logout/
Disallow: /?q=node/add/
Disallow: /?q=search/
Disallow: /?q=user/password/
Disallow: /?q=user/register/
Disallow: /?q=user/login/User-agent: baiduspider
# Directories
Disallow: /includes/
Disallow: /misc/
Disallow: /modules/
Disallow: /profiles/
Disallow: /scripts/
Disallow: /sites/
Disallow: /themes/
# Files
Disallow: /CHANGELOG.txt
Disallow: /cron.php
Disallow: /INSTALL.mysql.txt
Disallow: /INSTALL.pgsql.txt
Disallow: /install.php
Disallow: /INSTALL.txt
Disallow: /LICENSE.txt
Disallow: /MAINTAINERS.txt
Disallow: /update.php
Disallow: /UPGRADE.txt
Disallow: /xmlrpc.php
# Paths (clean URLs)
Disallow: /admin/
Disallow: /comment/reply/
Disallow: /contact/
Disallow: /logout/
Disallow: /node/add/
Disallow: /search/
Disallow: /user/register/
Disallow: /user/password/
Disallow: /user/login/
# Paths (no clean URLs)
Disallow: /?q=admin/
Disallow: /?q=comment/reply/
Disallow: /?q=contact/
Disallow: /?q=logout/
Disallow: /?q=node/add/
Disallow: /?q=search/
Disallow: /?q=user/password/
Disallow: /?q=user/register/
Disallow: /?q=user/login/
User-agent: *
Disallow: /這里主要通過(guò)Disallow,限制訪問(wèn)一些無(wú)關(guān)管理頁(yè)面與文件,另外通過(guò)User-agent * 屏蔽了除了百度與谷歌的所有搜索引擎爬蟲(chóng)。關(guān)于robots.txt具體使用,請(qǐng)搜索robots.txt教程。
?
另外關(guān)于搜索引擎的爬蟲(chóng)知識(shí),在網(wǎng)上看到一篇很好的介紹文章,轉(zhuǎn)載在這里:http://robbin.javaeye.com/blog/451014
因?yàn)樗阉饕娴牧餍?#xff0c;網(wǎng)絡(luò)爬蟲(chóng)已經(jīng)成了很普及網(wǎng)絡(luò)技術(shù),除了專(zhuān)門(mén)做搜索的Google,Yahoo,微軟,百度以外,幾乎每個(gè)大型門(mén)戶(hù)網(wǎng)站都有自己的搜索 引擎,大大小小叫得出來(lái)名字得就幾十種,還有各種不知名的幾千幾萬(wàn)種,對(duì)于一個(gè)內(nèi)容型驅(qū)動(dòng)的網(wǎng)站來(lái)說(shuō),受到網(wǎng)絡(luò)爬蟲(chóng)的光顧是不可避免的。?
一些智能的搜索引擎爬蟲(chóng)的爬取頻率比較合理,對(duì)網(wǎng)站資源消耗比較少,但是很多糟糕的網(wǎng)絡(luò)爬蟲(chóng),對(duì)網(wǎng)頁(yè)爬取能力很差,經(jīng)常并發(fā)幾十上百個(gè)請(qǐng)求循環(huán)重 復(fù)抓取,這種爬蟲(chóng)對(duì)中小型網(wǎng)站往往是毀滅性打擊,特別是一些缺乏爬蟲(chóng)編寫(xiě)經(jīng)驗(yàn)的程序員寫(xiě)出來(lái)的爬蟲(chóng)破壞力極強(qiáng)。曾經(jīng)有一次我在JavaEye的日志里面發(fā)現(xiàn)一個(gè)User- Agent是Java的爬蟲(chóng)一天之內(nèi)爬取了將近100萬(wàn)次動(dòng)態(tài)請(qǐng)求。這是一個(gè)用JDK標(biāo)準(zhǔn)類(lèi)庫(kù)編寫(xiě)的簡(jiǎn)單爬取網(wǎng)頁(yè)程序,由于JavaEye網(wǎng)站內(nèi)部鏈接構(gòu) 成了回環(huán)導(dǎo)致程序陷入了死循環(huán)。對(duì)于JavaEye這種百萬(wàn)PV級(jí)別的網(wǎng)站來(lái)說(shuō),這種爬蟲(chóng)造成的訪問(wèn)壓力會(huì)非常大,會(huì)導(dǎo)致網(wǎng)站訪問(wèn)速度緩慢,甚至無(wú)法訪 問(wèn)。?
此外,相當(dāng)數(shù)量的的網(wǎng)頁(yè)爬蟲(chóng)目的是盜取目標(biāo)網(wǎng)站的內(nèi)容。比方說(shuō)JavaEye網(wǎng)站就曾經(jīng)被兩個(gè)競(jìng)爭(zhēng)對(duì)手網(wǎng)站爬取論壇帖子,然后在自己的論壇里面用 機(jī)器人發(fā)帖,因此這種爬蟲(chóng)不僅僅影響網(wǎng)站訪問(wèn)速度,而且侵犯了網(wǎng)站的版權(quán)。?
對(duì)于一個(gè)原創(chuàng)內(nèi)容豐富,URL結(jié)構(gòu)合理易于爬取的網(wǎng)站來(lái)說(shuō),簡(jiǎn)直就是各種爬蟲(chóng)的盤(pán)中大餐,很多網(wǎng)站的訪問(wèn)流量構(gòu)成當(dāng)中,爬蟲(chóng)帶來(lái)的流量要遠(yuǎn)遠(yuǎn)超過(guò) 真實(shí)用戶(hù)訪問(wèn)流量,甚至爬蟲(chóng)流量要高出真實(shí)流量一個(gè)數(shù)量級(jí)。像JavaEye網(wǎng)站雖然設(shè)置了相當(dāng)嚴(yán)格的反爬蟲(chóng)策略,但是網(wǎng)站處理的動(dòng)態(tài)請(qǐng)求數(shù)量仍然是真實(shí) 用戶(hù)訪問(wèn)流量的2倍。可以肯定的說(shuō),當(dāng)今互聯(lián)網(wǎng)的網(wǎng)絡(luò)流量至少有2/3的流量爬蟲(chóng)帶來(lái)的。因此反爬蟲(chóng)是一個(gè)值得網(wǎng)站長(zhǎng)期探索和解決的問(wèn)題。?
一、手工識(shí)別和拒絕爬蟲(chóng)的訪問(wèn)?
有相當(dāng)多的爬蟲(chóng)對(duì)網(wǎng)站會(huì)造成非常高的負(fù)載,因此識(shí)別爬蟲(chóng)的來(lái)源IP是很容易的事情。最簡(jiǎn)單的辦法就是用netstat檢查80端口的連接:
C代碼?
- netstat?-nt?|?grep?youhostip:80?|?awk?'{print?$5}'?|?awk?-F":"?'{print?$1}'|?sort?|?uniq?-c?|?sort?-r?-n???
這行shell可以按照80端口連接數(shù)量對(duì)來(lái)源IP進(jìn)行排序,這樣可以直觀的判斷出來(lái)網(wǎng)頁(yè)爬蟲(chóng)。一般來(lái)說(shuō)爬蟲(chóng)的并發(fā)連接非常高。?
如果使用lighttpd做Web Server,那么就更簡(jiǎn)單了。lighttpd的mod_status提供了非常直觀的并發(fā)連接的信息,包括每個(gè)連接的來(lái)源IP,訪問(wèn)的URL,連接狀 態(tài)和連接時(shí)間等信息,只要檢查那些處于handle-request狀態(tài)的高并發(fā)IP就可以很快確定爬蟲(chóng)的來(lái)源IP了。?
拒絕爬蟲(chóng)請(qǐng)求既可以通過(guò)內(nèi)核防火墻來(lái)拒絕,也可以在web server拒絕,比方說(shuō)用iptables拒絕:?
C代碼?
- iptables?-A?INPUT?-i?eth0?-j?DROP?-p?tcp?--dport?80?-s?84.80.46.0/24????
直接封鎖爬蟲(chóng)所在的C網(wǎng)段地址。這是因?yàn)橐话闩老x(chóng)都是運(yùn)行在托管機(jī)房里面,可能在一個(gè)C段里面的多臺(tái)服務(wù)器上面都有爬蟲(chóng),而這個(gè)C段不可能是用戶(hù) 寬帶上網(wǎng),封鎖C段可以很大程度上解決問(wèn)題。?
有些人提出一種腦殘的觀點(diǎn),說(shuō)我要懲罰這些爬蟲(chóng)。我專(zhuān)門(mén)在網(wǎng)頁(yè)里面設(shè)計(jì)動(dòng)態(tài)循環(huán)鏈接頁(yè)面,讓爬蟲(chóng)掉進(jìn)陷阱,死循環(huán)爬不出來(lái),其實(shí)根本用不著設(shè)置陷 阱,弱智爬蟲(chóng)對(duì)正常網(wǎng)頁(yè)自己就爬不出來(lái),這樣做多此一舉不說(shuō),而且會(huì)讓真正的搜索引擎降低你的網(wǎng)頁(yè)排名。而且運(yùn)行一個(gè)爬蟲(chóng)根本不消耗什么機(jī)器資源,相反, 真正寶貴的是你的服務(wù)器CPU資源和服務(wù)器帶寬,簡(jiǎn)單的拒絕掉爬蟲(chóng)的請(qǐng)求是反爬蟲(chóng)最有效的策略。?
二、通過(guò)識(shí)別爬蟲(chóng)的User-Agent信息來(lái)拒絕爬蟲(chóng)?
有很多爬蟲(chóng)并不會(huì)以很高的并發(fā)連接爬取,一般不容易暴露自己;有些爬蟲(chóng)的來(lái)源IP分布很廣,很難簡(jiǎn)單的通過(guò)封鎖IP段地址來(lái)解決問(wèn)題;另外還有很 多各種各樣的小爬蟲(chóng),它們?cè)趪L試Google以外創(chuàng)新的搜索方式,每個(gè)爬蟲(chóng)每天爬取幾萬(wàn)的網(wǎng)頁(yè),幾十個(gè)爬蟲(chóng)加起來(lái)每天就能消耗掉上百萬(wàn)動(dòng)態(tài)請(qǐng)求的資源,由 于每個(gè)小爬蟲(chóng)單獨(dú)的爬取量都很低,所以你很難把它從每天海量的訪問(wèn)IP地址當(dāng)中把它準(zhǔn)確的挖出來(lái)。?
這種情況下我們可以通過(guò)爬蟲(chóng)的User-Agent信息來(lái)識(shí)別。每個(gè)爬蟲(chóng)在爬取網(wǎng)頁(yè)的時(shí)候,會(huì)聲明自己的User-Agent信息,因此我們就可 以通過(guò)記錄和分析User-Agent信息來(lái)挖掘和封鎖爬蟲(chóng)。我們需要記錄每個(gè)請(qǐng)求的User-Agent信息,對(duì)于Rails來(lái)說(shuō)我們可以簡(jiǎn)單的在 app/controllers/application.rb里面添加一個(gè)全局的before_filter,來(lái)記錄每個(gè)請(qǐng)求的User-Agent信 息:?
Ruby 代碼?
- logger.info?"HTTP_USER_AGENT?#{request.env["HTTP_USER_AGENT"]}"????
然后統(tǒng)計(jì)每天的production.log,抽取User-Agent信息,找出訪問(wèn)量最大的那些User-Agent。要注意的是我們只關(guān)注 那些爬蟲(chóng)的User-Agent信息,而不是真正瀏覽器User-Agent,所以還要排除掉瀏覽器User-Agent,要做到這一點(diǎn)僅僅需要一行 shell:?
Ruby 代碼?
- grep?HTTP_USER_AGENT?production.log?|?grep?-v?-E?'MSIE|Firefox|Chrome|Opera|Safari|Gecko'?|?sort?|?uniq?-c?|?sort?-r?-n?|?head?-n?100?>?bot.log????
統(tǒng)計(jì)結(jié)果類(lèi)似這樣:?
C代碼?
- 57335?HTTP_USER_AGENT?Baiduspider+(+http://www.baidu.com/search/spider.htm)??
- 56639?HTTP_USER_AGENT?Mozilla/5.0?(compatible;?Googlebot/2.1;?+http://www.google.com/bot.html)??
- 42610?HTTP_USER_AGENT?Mediapartners-Google??
- 19131?HTTP_USER_AGENT?msnbot/2.0b?(+http://search.msn.com/msnbot.htm)??
從日志就可以直觀的看出每個(gè)爬蟲(chóng)的請(qǐng)求次數(shù)。要根據(jù)User-Agent信息來(lái)封鎖爬蟲(chóng)是件很容易的事情,lighttpd配置如下:?
C代碼?
- $HTTP["useragent"]?=~?"qihoobot|^Java|Commons-HttpClient|Wget|^PHP|Ruby|Python"?{??
- ??url.rewrite?=?(?"^/(.*)"?=>?"/crawler.html"?)??
- }??
使用這種方式來(lái)封鎖爬蟲(chóng)雖然簡(jiǎn)單但是非常有效,除了封鎖特定的爬蟲(chóng),還可以封鎖常用的編程語(yǔ)言和HTTP類(lèi)庫(kù)的User-Agent信息,這樣就 可以避免很多無(wú)謂的程序員用來(lái)練手的爬蟲(chóng)程序?qū)W(wǎng)站的騷擾。?
還有一種比較常見(jiàn)的情況,就是某個(gè)搜索引擎的爬蟲(chóng)對(duì)網(wǎng)站爬取頻率過(guò)高,但是搜索引擎給網(wǎng)站帶來(lái)了很多流量,我們并不希望簡(jiǎn)單的封鎖爬蟲(chóng),僅僅是希望降低爬蟲(chóng)的請(qǐng)求頻率,減輕爬蟲(chóng)對(duì)網(wǎng)站造成的負(fù)載,那么我們可以這樣做:?
C代碼?
- $HTTP["user-agent"]?=~?"Baiduspider+"?{??
- ????connection.delay-seconds?=?10??
- }??
對(duì)百度的爬蟲(chóng)請(qǐng)求延遲10秒鐘再進(jìn)行處理,這樣就可以有效降低爬蟲(chóng)對(duì)網(wǎng)站的負(fù)載了。?
三、通過(guò)網(wǎng)站流量統(tǒng)計(jì)系統(tǒng)和日志分析來(lái)識(shí)別爬蟲(chóng)?
有些爬蟲(chóng)喜歡修改User-Agent信息來(lái)偽裝自己,把自己偽裝成一個(gè)真實(shí)瀏覽器的User-Agent信息,讓你無(wú)法有效的識(shí)別。這種情況下 我們可以通過(guò)網(wǎng)站流量系統(tǒng)記錄的真實(shí)用戶(hù)訪問(wèn)IP來(lái)進(jìn)行識(shí)別。?
主流的網(wǎng)站流量統(tǒng)計(jì)系統(tǒng)不外乎兩種實(shí)現(xiàn)策略:一種策略是在網(wǎng)頁(yè)里面嵌入一段js,這段js會(huì)向特定的統(tǒng)計(jì)服務(wù)器發(fā)送請(qǐng)求的方式記錄訪問(wèn)量;另一種 策略是直接分析服務(wù)器日志,來(lái)統(tǒng)計(jì)網(wǎng)站訪問(wèn)量。在理想的情況下,嵌入js的方式統(tǒng)計(jì)的網(wǎng)站流量應(yīng)該高于分析服務(wù)器日志,這是因?yàn)橛脩?hù)瀏覽器會(huì)有緩存,不一 定每次真實(shí)用戶(hù)訪問(wèn)都會(huì)觸發(fā)服務(wù)器的處理。但實(shí)際情況是,分析服務(wù)器日志得到的網(wǎng)站訪問(wèn)量遠(yuǎn)遠(yuǎn)高于嵌入js方式,極端情況下,甚至要高出10倍以上。?
現(xiàn)在很多網(wǎng)站喜歡采用awstats來(lái)分析服務(wù)器日志,來(lái)計(jì)算網(wǎng)站的訪問(wèn)量,但是當(dāng)他們一旦采用Google Analytics來(lái)統(tǒng)計(jì)網(wǎng)站流量的時(shí)候,卻發(fā)現(xiàn)GA統(tǒng)計(jì)的流量遠(yuǎn)遠(yuǎn)低于awstats,為什么GA和awstats統(tǒng)計(jì)會(huì)有這么大差異呢?罪魁禍?zhǔn)拙褪?把自己偽裝成瀏覽器的網(wǎng)絡(luò)爬蟲(chóng)。這種情況下awstats無(wú)法有效的識(shí)別了,所以awstats的統(tǒng)計(jì)數(shù)據(jù)會(huì)虛高。?
其實(shí)作為一個(gè)網(wǎng)站來(lái)說(shuō),如果希望了解自己的網(wǎng)站真實(shí)訪問(wèn)量,希望精確了解網(wǎng)站每個(gè)頻道的訪問(wèn)量和訪問(wèn)用戶(hù),應(yīng)該用頁(yè)面里面嵌入js的方式來(lái)開(kāi)發(fā)自 己的網(wǎng)站流量統(tǒng)計(jì)系統(tǒng)。自己做一個(gè)網(wǎng)站流量統(tǒng)計(jì)系統(tǒng)是件很簡(jiǎn)單的事情,寫(xiě)段服務(wù)器程序響應(yīng)客戶(hù)段js的請(qǐng)求,分析和識(shí)別請(qǐng)求然后寫(xiě)日志的同時(shí)做后臺(tái)的異步 統(tǒng)計(jì)就搞定了。?
通過(guò)流量統(tǒng)計(jì)系統(tǒng)得到的用戶(hù)IP基本是真實(shí)的用戶(hù)訪問(wèn),因?yàn)橐话闱闆r下爬蟲(chóng)是無(wú)法執(zhí)行網(wǎng)頁(yè)里面的js代碼片段的。所以我們可以拿流量統(tǒng)計(jì)系統(tǒng)記錄 的IP和服務(wù)器程序日志記錄的IP地址進(jìn)行比較,如果服務(wù)器日志里面某個(gè)IP發(fā)起了大量的請(qǐng)求,在流量統(tǒng)計(jì)系統(tǒng)里面卻根本找不到,或者即使找得到,可訪問(wèn) 量卻只有寥寥幾個(gè),那么無(wú)疑就是一個(gè)網(wǎng)絡(luò)爬蟲(chóng)。?
分析服務(wù)器日志統(tǒng)計(jì)訪問(wèn)最多的IP地址段一行shell就可以了:?
C代碼?
- grep?Processing?production.log?|?awk?'{print?$4}'?|?awk?-F'.'?'{print?$1"."$2"."$3".0"}'?|?sort?|?uniq?-c?|?sort?-r?-n?|?head?-n?200?>?stat_ip.log????
然后把統(tǒng)計(jì)結(jié)果和流量統(tǒng)計(jì)系統(tǒng)記錄的IP地址進(jìn)行對(duì)比,排除真實(shí)用戶(hù)訪問(wèn)IP,再排除我們希望放行的網(wǎng)頁(yè)爬蟲(chóng),比方Google,百度,微軟 msn爬蟲(chóng)等等。最后的分析結(jié)果就就得到了爬蟲(chóng)的IP地址了。以下代碼段是個(gè)簡(jiǎn)單的實(shí)現(xiàn)示意:?
Ruby 代碼?
- whitelist?=?[]??
- IO.foreach("#{RAILS_ROOT}/lib/whitelist.txt")?{?|line|?whitelist?<<?line.split[0].strip?if?line?}??
- ??
- realiplist?=?[]??
- IO.foreach("#{RAILS_ROOT}/log/visit_ip.log")?{?|line|??realiplist?<<?line.strip?if?line?}??
- ??
- iplist?=?[]??
- IO.foreach("#{RAILS_ROOT}/log/stat_ip.log")?do?|line|??
- ??ip?=?line.split[1].strip??
- ??iplist?<<?ip?if?line.split[0].to_i?>?3000?&&?!whitelist.include?(ip)?&&?!realiplist.include?(ip)??
- end???
- ??
- Report.deliver_crawler(iplist)??
分析服務(wù)器日志里面請(qǐng)求次數(shù)超過(guò)3000次的IP地址段,排除白名單地址和真實(shí)訪問(wèn)IP地址,最后得到的就是爬蟲(chóng)IP了,然后可以發(fā)送郵件通知管 理員進(jìn)行相應(yīng)的處理。?
四、網(wǎng)站的實(shí)時(shí)反爬蟲(chóng)防火墻實(shí)現(xiàn)策略?
通過(guò)分析日志的方式來(lái)識(shí)別網(wǎng)頁(yè)爬蟲(chóng)不是一個(gè)實(shí)時(shí)的反爬蟲(chóng)策略。如果一個(gè)爬蟲(chóng)非要針對(duì)你的網(wǎng)站進(jìn)行處心積慮的爬取,那么他可能會(huì)采用分布式爬取策 略,比方說(shuō)尋找?guī)装偕锨€(gè)國(guó)外的代理服務(wù)器瘋狂的爬取你的網(wǎng)站,從而導(dǎo)致網(wǎng)站無(wú)法訪問(wèn),那么你再分析日志是不可能及時(shí)解決問(wèn)題的。所以必須采取實(shí)時(shí)反爬蟲(chóng) 策略,要能夠動(dòng)態(tài)的實(shí)時(shí)識(shí)別和封鎖爬蟲(chóng)的訪問(wèn)。?
要自己編寫(xiě)一個(gè)這樣的實(shí)時(shí)反爬蟲(chóng)系統(tǒng)其實(shí)也很簡(jiǎn)單。比方說(shuō)我們可以用memcached來(lái)做訪問(wèn)計(jì)數(shù)器,記錄每個(gè)IP的訪問(wèn)頻度,在單位時(shí)間之 內(nèi),如果訪問(wèn)頻率超過(guò)一個(gè)閥值,我們就認(rèn)為這個(gè)IP很可能有問(wèn)題,那么我們就可以返回一個(gè)驗(yàn)證碼頁(yè)面,要求用戶(hù)填寫(xiě)驗(yàn)證碼。如果是爬蟲(chóng)的話(huà),當(dāng)然不可能填 寫(xiě)驗(yàn)證碼,所以就被拒掉了,這樣很簡(jiǎn)單就解決了爬蟲(chóng)問(wèn)題。?
用memcache記錄每個(gè)IP訪問(wèn)計(jì)數(shù),單位時(shí)間內(nèi)超過(guò)閥值就讓用戶(hù)填寫(xiě)驗(yàn)證碼,用Rails編寫(xiě)的示例代碼如下:?
Ruby 代碼?
- ip_counter?=?Rails.cache.increment(request.remote_ip)??
- if?!ip_counter??
- ??Rails.cache.write(request.remote_ip,?1,?:expires_in?=>?30.minutes)??
- elsif?ip_counter?>?2000??
- ??render?:template?=>?'test',?:status?=>?401?and?return?false??
- end??
這段程序只是最簡(jiǎn)單的示例,實(shí)際的代碼實(shí)現(xiàn)我們還會(huì)添加很多判斷,比方說(shuō)我們可能要排除白名單IP地址段,要允許特定的User-Agent通 過(guò),要針對(duì)登錄用戶(hù)和非登錄用戶(hù),針對(duì)有無(wú)referer地址采取不同的閥值和計(jì)數(shù)加速器等等。?
此外如果分布式爬蟲(chóng)爬取頻率過(guò)高的話(huà),過(guò)期就允許爬蟲(chóng)再次訪問(wèn)還是會(huì)對(duì)服務(wù)器造成很大的壓力,因此我們可以添加一條策略:針對(duì)要求用戶(hù)填寫(xiě)驗(yàn)證碼 的IP地址,如果該IP地址短時(shí)間內(nèi)繼續(xù)不停的請(qǐng)求,則判斷為爬蟲(chóng),加入黑名單,后續(xù)請(qǐng)求全部拒絕掉。為此,示例代碼可以改進(jìn)一下:?
Ruby 代碼?
- before_filter?:ip_firewall,?:except?=>?:test??
- def?ip_firewall??
- ??render?:file?=>?"#{RAILS_ROOT}/public/403.html",?:status?=>?403?if?BlackList.include?(ip_sec)??
- end??
我們可以定義一個(gè)全局的過(guò)濾器,對(duì)所有請(qǐng)求進(jìn)行過(guò)濾,出現(xiàn)在黑名單的IP地址一律拒絕。對(duì)非黑名單的IP地址再進(jìn)行計(jì)數(shù)和統(tǒng)計(jì):?
Ruby 代碼?
- ip_counter?=?Rails.cache.increment(request.remote_ip)??
- if?!ip_counter??
- ??Rails.cache.write(request.remote_ip,?1,?:expires_in?=>?30.minutes)??
- elsif?ip_counter?>?2000??
- ??crawler_counter?=?Rails.cache.increment("crawler/#{request.remote_ip}")??
- ??if?!crawler_counter??
- ????Rails.cache.write("crawler/#{request.remote_ip}",?1,?:expires_in?=>?10.minutes)??
- ??elsif?crawler_counter?>?50??
- ????BlackList.add(ip_sec)??
- ????render?:file?=>?"#{RAILS_ROOT}/public/403.html",?:status?=>?403?and?return?false??
- ??end??
- ??render?:template?=>?'test',?:status?=>?401?and?return?false??
- end??
如果某個(gè)IP地址單位時(shí)間內(nèi)訪問(wèn)頻率超過(guò)閥值,再增加一個(gè)計(jì)數(shù)器,跟蹤他會(huì)不會(huì)立刻填寫(xiě)驗(yàn)證碼,如果他不填寫(xiě)驗(yàn)證碼,在短時(shí)間內(nèi)還是高頻率訪問(wèn), 就把這個(gè)IP地址段加入黑名單,除非用戶(hù)填寫(xiě)驗(yàn)證碼激活,否則所有請(qǐng)求全部拒絕。這樣我們就可以通過(guò)在程序里面維護(hù)黑名單的方式來(lái)動(dòng)態(tài)的跟蹤爬蟲(chóng)的情況, 甚至我們可以自己寫(xiě)個(gè)后臺(tái)來(lái)手工管理黑名單列表,了解網(wǎng)站爬蟲(chóng)的情況。?
這個(gè)策略已經(jīng)比較智能了,但是還不夠好!我們還可以繼續(xù)改進(jìn):?
1、用網(wǎng)站流量統(tǒng)計(jì)系統(tǒng)來(lái)改進(jìn)實(shí)時(shí)反爬蟲(chóng)系統(tǒng)?
還記得嗎?網(wǎng)站流量統(tǒng)計(jì)系統(tǒng)記錄的IP地址是真實(shí)用戶(hù)訪問(wèn)IP,所以我們?cè)诰W(wǎng)站流量統(tǒng)計(jì)系統(tǒng)里面也去操作memcached,但是這次不是增加計(jì) 數(shù)值,而是減少計(jì)數(shù)值。在網(wǎng)站流量統(tǒng)計(jì)系統(tǒng)里面每接收到一個(gè)IP請(qǐng)求,就相應(yīng)的cache.decrement(key)。所以對(duì)于真實(shí)用戶(hù)的IP來(lái)說(shuō), 它的計(jì)數(shù)值總是加1然后就減1,不可能很高。這樣我們就可以大大降低判斷爬蟲(chóng)的閥值,可以更加快速準(zhǔn)確的識(shí)別和拒絕掉爬蟲(chóng)。?
2、用時(shí)間窗口來(lái)改進(jìn)實(shí)時(shí)反爬蟲(chóng)系統(tǒng)?
爬蟲(chóng)爬取網(wǎng)頁(yè)的頻率都是比較固定的,不像人去訪問(wèn)網(wǎng)頁(yè),中間的間隔時(shí)間比較無(wú)規(guī)則,所以我們可以給每個(gè)IP地址建立一個(gè)時(shí)間窗口,記錄IP地址最 近12次訪問(wèn)時(shí)間,每記錄一次就滑動(dòng)一次窗口,比較最近訪問(wèn)時(shí)間和當(dāng)前時(shí)間,如果間隔時(shí)間很長(zhǎng)判斷不是爬蟲(chóng),清除時(shí)間窗口,如果間隔不長(zhǎng),就回溯計(jì)算指定 時(shí)間段的訪問(wèn)頻率,如果訪問(wèn)頻率超過(guò)閥值,就轉(zhuǎn)向驗(yàn)證碼頁(yè)面讓用戶(hù)填寫(xiě)驗(yàn)證碼。?
最終這個(gè)實(shí)時(shí)反爬蟲(chóng)系統(tǒng)就相當(dāng)完善了,它可以很快的識(shí)別并且自動(dòng)封鎖爬蟲(chóng)的訪問(wèn),保護(hù)網(wǎng)站的正常訪問(wèn)。不過(guò)有些爬蟲(chóng)可能相當(dāng)狡猾,它也許會(huì)通過(guò)大 量的爬蟲(chóng)測(cè)試來(lái)試探出來(lái)你的訪問(wèn)閥值,以低于閥值的爬取速度抓取你的網(wǎng)頁(yè),因此我們還需要輔助第3種辦法,用日志來(lái)做后期的分析和識(shí)別,就算爬蟲(chóng)爬的再 慢,它累計(jì)一天的爬取量也會(huì)超過(guò)你的閥值被你日志分析程序識(shí)別出來(lái)。?
總之我們綜合運(yùn)用上面的四種反爬蟲(chóng)策略,可以很大程度上緩解爬蟲(chóng)對(duì)網(wǎng)站造成的負(fù)面影響,保證網(wǎng)站的正常訪問(wèn)。
一、搜索引擎的蜘蛛,是不是爬得越多越好?
? ? ?當(dāng)然不是!不論什么搜索引擎的爬蟲(chóng),來(lái)抓取你網(wǎng)站的頁(yè)面的時(shí)候,肯定在消耗你的網(wǎng)站資源,例如網(wǎng)站的連接數(shù)、網(wǎng)絡(luò)帶寬資源(空間流量)、服務(wù)器的負(fù)載。
另外,搜索引擎的爬蟲(chóng)來(lái)抓取你的頁(yè)面數(shù)據(jù)后,它也不一定收用數(shù)據(jù)。只代表它“到此一游”留下痕跡而已。因此你的網(wǎng)站為它“服務(wù)過(guò)、接待過(guò)”。
? ? ?對(duì)于一個(gè)原創(chuàng)內(nèi)容豐富,URL結(jié)構(gòu)合理易于爬取的網(wǎng)站來(lái)說(shuō),簡(jiǎn)直就是各種爬蟲(chóng)的盤(pán)中大餐,很多網(wǎng)站的訪問(wèn)流量構(gòu)成當(dāng)中,爬蟲(chóng)帶來(lái)的流量要遠(yuǎn)遠(yuǎn)超過(guò)真實(shí)用戶(hù)訪問(wèn)流量,甚至爬蟲(chóng)流量要高出真實(shí)流量一個(gè)數(shù)量級(jí)。像提高網(wǎng)站有效利用率雖然設(shè)置了相當(dāng)嚴(yán)格的反爬蟲(chóng)策略,但是網(wǎng)站處理的動(dòng)態(tài)請(qǐng)求數(shù)量仍然是真實(shí)用戶(hù)訪問(wèn)流量的2倍。可以肯定的說(shuō),當(dāng)今互聯(lián)網(wǎng)的網(wǎng)絡(luò)流量至少有2/3的流量爬蟲(chóng)帶來(lái)的。因此反爬蟲(chóng)是一個(gè)值得網(wǎng)站長(zhǎng)期探索和解決的問(wèn)題。
搜索引擎的主要工作流程(圖)
搜索引擎爬蟲(chóng)對(duì)網(wǎng)站的負(fù)面影響。
1.網(wǎng)站有限的帶寬資源,而爬蟲(chóng)的量過(guò)多,導(dǎo)致正常用戶(hù)訪問(wèn)緩慢。
例如,原本虛擬主機(jī)主機(jī)的連接數(shù)受限,帶寬資源也是有限。這種情況搜索引擎爬蟲(chóng)受影響呈現(xiàn)更明顯。
2.搜索引擎爬蟲(chóng)過(guò)頻密,抓取掃描很多無(wú)效頁(yè)面。甚至抓頁(yè)面抓到服務(wù)器報(bào)502、500 、504 等服務(wù)器內(nèi)部錯(cuò)誤了,蜘蛛爬蟲(chóng)還在不停使勁抓取。
不論是實(shí)際生產(chǎn)監(jiān)控,還是網(wǎng)友反映,部分搜索引擎爬蟲(chóng)可用幾個(gè)詞來(lái)形容“壞蜘蛛”“惡爬蟲(chóng)”。很多討論搜索引擎相關(guān)的文章,已經(jīng)將它們列過(guò)排行榜。有興趣的可更多了解它。
百度蜘蛛工作圖
3.與網(wǎng)站主題不相關(guān)的搜索引擎爬蟲(chóng)消耗資源。
例如,典型的例子搜索引擎“一淘網(wǎng)蜘蛛(EtaoSpider)為一淘網(wǎng)抓取工具。”被各大電子商務(wù)購(gòu)物網(wǎng)站屏蔽。拒絕一淘網(wǎng)抓取其商品信息及用戶(hù)產(chǎn)生的點(diǎn)評(píng)內(nèi)容。被禁止的原因首先應(yīng)該是它們之間沒(méi)有合作互利的關(guān)系,還有就是EtaoSpider爬蟲(chóng)是一個(gè)抓取最瘋狂的蜘蛛。統(tǒng)計(jì)發(fā)現(xiàn)EtaoSpider爬蟲(chóng)的一天爬行量比“百度蜘蛛:Baiduspider”“360蜘蛛:360Spider”“SOSO蜘蛛:Sosospider”等主流蜘蛛爬蟲(chóng)多幾倍,并且是遠(yuǎn)遠(yuǎn)的多。重點(diǎn)是EtaoSpider被抓取只會(huì)消耗你的網(wǎng)站資源,它不會(huì)給你帶來(lái)訪問(wèn)量,或者其它對(duì)你有利用的。中文成語(yǔ)詞典可用一個(gè)詞來(lái)形容,這個(gè)詞留給大家想吧。
4.一些搜索引擎開(kāi)發(fā)程序員,它們寫(xiě)的爬蟲(chóng)程序在測(cè)試爬行。你懂的...
5.robots.txt文件不是萬(wàn)能!
肯定有很多人認(rèn)為,在robots.txt設(shè)置屏蔽搜索引擎爬蟲(chóng)即可,或者允許某些特定的搜索引擎爬蟲(chóng),能達(dá)到你預(yù)想效果。
不錯(cuò)正規(guī)的搜索引擎會(huì)遵守規(guī)則,且不會(huì)及時(shí)生效。實(shí)際中某些蜘蛛往往不是這樣的,先掃描抓取你的頁(yè)面,無(wú)視你的robots.txt。也可能它抓取后不一定留用;或者它只是統(tǒng)計(jì)信息,收集互聯(lián)網(wǎng)行業(yè)趨勢(shì)分析統(tǒng)計(jì)。
6.還有一種它們不是蜘蛛,但其有蜘蛛的特性。例如采集軟件,采集程序,網(wǎng)絡(luò)掃描e-mail地址的工具,各式各樣的SEO分析統(tǒng)計(jì)工具,千奇百怪的網(wǎng)站漏洞掃描工具,等等,只有你想不到的工具,沒(méi)有它做不到的...
二、有效指引搜索引擎對(duì)應(yīng)的措施,及解決方法:
1.依據(jù)空間流量實(shí)際情況,就保留幾個(gè)常用的屏蔽掉其它蜘蛛以節(jié)省流量。以暫時(shí)空間流量還足夠使用,先保證正常瀏覽器優(yōu)先。
2.從服務(wù)器防火墻iptable直接屏蔽蜘蛛IP段、詳細(xì)的IP。這是最直接、有效的屏蔽方法。
3.WWW服務(wù)器層面做限制。例如Nginx,Squid,Lighttpd,直接通過(guò)“http_user_agent”屏蔽搜索引擎爬蟲(chóng)。
4.最后robots.txt文件做限制。搜索引擎國(guó)際規(guī)則還是要遵循規(guī)則的,讓robots.txt明示公布于眾。
后續(xù)文章會(huì)詳細(xì)介紹該方法,包括如果發(fā)現(xiàn)蜘蛛,從網(wǎng)站的日志里統(tǒng)計(jì)蜘蛛,發(fā)現(xiàn)未知的蜘蛛。針對(duì)不同的蜘蛛,屏蔽蜘蛛、禁止爬蟲(chóng)怎么樣更高效,更快捷。并且通過(guò)實(shí)例來(lái)介紹。
象形圖示蜘蛛,爬蟲(chóng)機(jī)器人(圖)
三、收集最新最準(zhǔn)確各大搜索引擎蜘蛛名稱(chēng)
信息來(lái)源線上:最新最準(zhǔn)確
根據(jù)線上空間的訪問(wèn)日志來(lái)整理常見(jiàn)的蜘蛛名稱(chēng),不求最全,但力求爬蟲(chóng)信息資料最新最準(zhǔn)確。以下搜索引擎蜘蛛名稱(chēng)都是根據(jù)線上空間日志親手提取。
各種搜索引擎的蜘蛛爬蟲(chóng)會(huì)不斷地訪問(wèn)抓取我們站點(diǎn)的內(nèi)容,也會(huì)消耗站點(diǎn)的一定流量,有時(shí)候就需要屏蔽某些蜘蛛訪問(wèn)我們的站點(diǎn)。
其實(shí)有效常用的搜索引擎就那么幾個(gè),只要在robots.txt文件里把常用的幾個(gè)搜索引擎蜘蛛允許放行就好了,其它的爬蟲(chóng)統(tǒng)統(tǒng)通過(guò)通配符(*)禁止掉,屏蔽某些蜘蛛。
現(xiàn)況:
從網(wǎng)上獲取的搜索引擎蜘蛛名稱(chēng),幾乎都是原文復(fù)制粘貼的轉(zhuǎn)載又轉(zhuǎn)載的文章,而且很多的資料都是過(guò)期的了,這些舊資料根本就沒(méi)修正和更新(實(shí)際用處不大),并且關(guān)于蜘蛛名稱(chēng)、大小寫(xiě)眾說(shuō)不一,根本就獲取不到一個(gè)準(zhǔn)確無(wú)誤的資料信息。
最新最準(zhǔn)確各大搜索引擎蜘蛛名稱(chēng):
1、百度蜘蛛:Baiduspider
網(wǎng)上的資料百度蜘蛛名稱(chēng)有BaiduSpider、baiduspider等,都洗洗睡吧,那是舊黃歷了。百度蜘蛛最新名稱(chēng)為Baiduspider。日志中還發(fā)現(xiàn)了Baiduspider-image這個(gè)百度旗下蜘蛛,查了下資料(其實(shí)直接看名字就可以了……),是抓取圖片的蜘蛛。
常見(jiàn)百度旗下同類(lèi)型蜘蛛還有下面這些:Baiduspider-mobile(抓取wap)、Baiduspider-image(抓取圖片)、Baiduspider-video(抓取視頻)、Baiduspider-news(抓取新聞)。
注:以上百度蜘蛛目前常見(jiàn)的是Baiduspider和Baiduspider-image兩種。
2、谷歌蜘蛛:Googlebot
這個(gè)爭(zhēng)議較少,但也有說(shuō)是GoogleBot的。谷歌蜘蛛最新名稱(chēng)為“compatible; Googlebot/2.1;”。還發(fā)現(xiàn)了Googlebot-Mobile,看名字是抓取wap內(nèi)容的。
3、360蜘蛛:360Spider,它是一個(gè)很“勤奮抓爬”的蜘蛛。
4、SOSO蜘蛛:Sosospider,也可為它頒一個(gè)“勤奮抓爬”獎(jiǎng)的蜘蛛。
5、雅虎蜘蛛:“Yahoo! Slurp China”或者Yahoo!?
名稱(chēng)中帶“Slurp”和空格,名稱(chēng)有空格robots里名稱(chēng)可以使用“Slurp”或者“Yahoo”單詞描述,不知道有效無(wú)效。
6、有道蜘蛛:YoudaoBot,YodaoBot(兩個(gè)名字都有,中文拼音少了個(gè)U字母讀音差別很大嘎,這都會(huì)少?)
7、搜狗蜘蛛:Sogou News Spider
搜狗蜘蛛還包括如下這些:Sogou web spider、Sogou inst spider、Sogou spider2、Sogou blog、Sogou News Spider、Sogou Orion spider,
(參考一些網(wǎng)站的robots文件,搜狗蜘蛛名稱(chēng)可以用Sogou概括,無(wú)法驗(yàn)證不知道有沒(méi)有效)
看看最權(quán)威的百度的robots.txt ,http://www.baidu.com/robots.txt 就為Sogou搜狗蜘蛛費(fèi)了不少字節(jié),占了一大塊領(lǐng)地。
“Sogou web spider;Sogou inst spider;Sogou spider2;Sogou blog;Sogou News Spider;Sogou Orion spider”目前6個(gè),名稱(chēng)都帶空格。
線上常見(jiàn)"Sogou web spider/4.0" ;"Sogou News Spider/4.0" ;"Sogou inst spider/4.0" 可以為它頒個(gè)“占名為王”獎(jiǎng)。
8、MSN蜘蛛:msnbot,msnbot-media(只見(jiàn)到msnbot-media在狂爬……)
9、必應(yīng)蜘蛛:bingbot?
線上(compatible; bingbot/2.0;)
10、一搜蜘蛛:YisouSpider
11、Alexa蜘蛛:ia_archiver
12、宜搜蜘蛛:EasouSpider
13、即刻蜘蛛:JikeSpider
14、一淘網(wǎng)蜘蛛:EtaoSpider
"Mozilla/5.0 (compatible; EtaoSpider/1.0; http://省略/EtaoSpider)"
根據(jù)上述蜘蛛中選擇幾個(gè)常用的允許抓取,其余的都可以通過(guò)robots屏蔽抓取。如果你暫時(shí)空間流量還足夠使用,等流量緊張了就保留幾個(gè)常用的屏蔽掉其它蜘蛛以節(jié)省流量。至于那些蜘蛛抓取對(duì)網(wǎng)站能帶來(lái)有利用的價(jià)值,網(wǎng)站的管理者眼睛是雪亮的。
另外還發(fā)現(xiàn)了如 YandexBot、AhrefsBot和ezooms.bot這些蜘蛛,據(jù)說(shuō)這些蜘蛛國(guó)外噶,對(duì)中文網(wǎng)站用處很小。那不如就節(jié)省下資源。
小結(jié):
這次分析了對(duì)搜索引擎爬蟲(chóng)的危害,蜘蛛對(duì)網(wǎng)站的負(fù)面影響;如何有效指引搜索引擎對(duì)應(yīng)的措施,及解決方法;收集來(lái)源線上最新最準(zhǔn)確各大搜索引擎蜘蛛名稱(chēng)。
?
網(wǎng)站建設(shè)好了,當(dāng)然是希望網(wǎng)頁(yè)被搜索引擎收錄的越多越好,但有時(shí)候我們也會(huì)碰到網(wǎng)站不需要被搜索引擎收錄的情況。
比如,你要啟用一個(gè)新的域名做鏡像網(wǎng)站,主要用于PPC 的推廣,這個(gè)時(shí)候就要想辦法屏蔽搜索引擎蜘蛛抓取和索引我們鏡像網(wǎng)站的所有網(wǎng)頁(yè)。因?yàn)槿绻R像網(wǎng)站也被搜索引擎收錄的話(huà),很有可能會(huì)影響官網(wǎng)在搜索引擎的權(quán)重,這肯定是我們不想看到的結(jié)果。
以下列舉了屏蔽主流搜索引擎爬蟲(chóng)(蜘蛛)抓取/索引/收錄網(wǎng)頁(yè)的幾種思路。注意:是整站屏蔽,而且是盡可能的屏蔽掉所有主流搜索引擎的爬蟲(chóng)(蜘蛛)。
1、通過(guò) robots.txt 文件屏蔽
可以說(shuō) robots.txt 文件是最重要的一種渠道(能和搜索引擎建立直接對(duì)話(huà))。我通過(guò)分析我自己博客的服務(wù)器日志文件,給出以下建議(同時(shí)歡迎網(wǎng)友補(bǔ)充):
User-agent: Baiduspider
Disallow: /
User-agent: Googlebot
Disallow: /
User-agent: Googlebot-Mobile
Disallow: /
User-agent: Googlebot-Image
Disallow:/
User-agent: Mediapartners-Google
Disallow: /
User-agent: Adsbot-Google
Disallow: /
User-agent:Feedfetcher-Google
Disallow: /
User-agent: Yahoo! Slurp
Disallow: /
User-agent: Yahoo! Slurp China
Disallow: /
User-agent: Yahoo!-AdCrawler
Disallow: /
User-agent: YoudaoBot
Disallow: /
User-agent: Sosospider
Disallow: /
User-agent: Sogou spider
Disallow: /
User-agent: Sogou web spider
Disallow: /
User-agent: MSNBot
Disallow: /
User-agent: ia_archiver
Disallow: /
User-agent: Tomato Bot
Disallow: /
User-agent: *
Disallow: /
2、通過(guò) meta tag 屏蔽
在所有的網(wǎng)頁(yè)頭部文件添加,添加如下語(yǔ)句:
<meta name="robots" content="noindex, nofollow">
3、通過(guò)服務(wù)器(如:Linux/nginx )配置文件設(shè)置
直接過(guò)濾 spider/robots 的IP 段。
小注:第1招和第2招只對(duì)“君子”有效,防止“小人”要用到第3招(“君子”和“小人”分別泛指指遵守與不遵守 robots.txt 協(xié)議的 spider/robots),所以網(wǎng)站上線之后要不斷跟蹤分析日志,篩選出這些 badbot 的ip,然后屏蔽之。
這里有一個(gè)badbot ip 數(shù)據(jù)庫(kù):http://www.spam-whackers.com/bad.bots.htm
4、通過(guò)搜索引擎提供的站長(zhǎng)工具,刪除網(wǎng)頁(yè)快照
比如,有的時(shí)候百度不嚴(yán)格遵守 robots.txt 協(xié)議,可以通過(guò)百度提供的“網(wǎng)頁(yè)投訴”入口刪除網(wǎng)頁(yè)快照。百度網(wǎng)頁(yè)投訴中心:http://tousu.baidu.com/webmaster/add
如下圖是我的一個(gè)網(wǎng)頁(yè)投訴:
大概3天左右的時(shí)間過(guò)去,這個(gè)網(wǎng)頁(yè)的百度快照也被刪除,說(shuō)明此種方法也能起效,當(dāng)然這是不得而為之,屬于亡羊補(bǔ)牢。
5、補(bǔ)充更新
可以通過(guò)檢測(cè) HTTP_USER_AGENT 是否為爬蟲(chóng)/蜘蛛訪問(wèn),然后直接返回403 狀態(tài)碼屏蔽之。比如:由于api 權(quán)限與微博信息隱私保護(hù)原因,Xweibo 2.0 版本后禁止搜索引擎收錄。
關(guān)于如何屏蔽搜索引擎爬蟲(chóng)(蜘蛛)抓取/索引/收錄網(wǎng)頁(yè),您有其他什么更好的建議或者方法,也歡迎發(fā)表評(píng)論!期待與您交流。
本文作者:Bruce
原文地址:http://www.wuzhisong.com/blog/67/
?
首先,我來(lái)介紹一下什么是robots.txt:robots.txt是搜索引擎中訪問(wèn)網(wǎng)站的時(shí)候要查 看的第一個(gè)文件。Robots.txt文件告訴蜘蛛程序在服務(wù)器上什么文件是可以被查看的。當(dāng)一個(gè)搜索蜘蛛訪問(wèn)一個(gè)站點(diǎn)時(shí),它會(huì)首先檢查該站點(diǎn)根目錄下是 否存在robots.txt,如果存在,搜索機(jī)器人就會(huì)按照該文件中的內(nèi)容來(lái)確定訪問(wèn)的范圍;如果該文件不存在,所有的搜索蜘蛛將能夠訪問(wèn)網(wǎng)站上所有沒(méi)有 被口令保護(hù)的頁(yè)面。最后,robots.txt必須放置在一個(gè)站點(diǎn)的根目錄下。?
大家可以參考一下谷歌、百度和騰訊的robots寫(xiě)法:?
http://www.google.com/robots.txt?
http://www.baidu.com/robots.txt?
http://www.qq.com/robots.txt?
大家了解完robots.txt后,那么我們可以用robots.txt來(lái)做什么??
1、用robots.txt屏蔽相似度高的頁(yè)面或沒(méi)內(nèi)容的頁(yè)面。?
我們知道,搜索引擎收錄網(wǎng)頁(yè)后,會(huì)對(duì)網(wǎng)頁(yè)進(jìn)行“審核”,而當(dāng)兩個(gè)網(wǎng)頁(yè)的相似度很高時(shí),那么搜索引擎就會(huì)刪除掉其中一個(gè),并且會(huì)降低一點(diǎn)你網(wǎng)站的得分。?
假設(shè)以下這兩個(gè)鏈接,內(nèi)容其實(shí)差不多,那么第一個(gè)鏈接就應(yīng)該屏蔽掉。?
/XXX?123?
/123.html?
像第一個(gè)的鏈接這樣的鏈接非常多,那么我們要怎么屏蔽呢?其實(shí)只要屏蔽/XXX?就可以屏蔽所有的鏈接了。?
代碼如下:?
Disallow: /XXX??
同理,一些沒(méi)有內(nèi)容的頁(yè)面我們也可以利用相同的辦法將其屏蔽掉。?
2、用robots.txt屏蔽多余的鏈接,一般保留靜態(tài)的鏈接(既HTML、htm、shtml等)。?
由于網(wǎng)站中經(jīng)常會(huì)出現(xiàn)多個(gè)鏈接指向同一個(gè)頁(yè)面的情況,而這樣會(huì)讓搜索引擎對(duì)網(wǎng)站的友好度降低。為了避免這一個(gè)情況,我們就可以通過(guò)robots.txt把 非主要的鏈接去掉。
比如以下兩個(gè)鏈接指向同樣的頁(yè)面:?
/OOO?123?
/123.html?
那么我們就應(yīng)該去掉第一個(gè)垃圾,代碼如下:?
Disallow: /OOO?123?
3、用robots.txt屏蔽死鏈?
死鏈就是曾經(jīng)存在的網(wǎng)頁(yè),因?yàn)楦陌婊蚱渌蚨バв煤缶妥兂伤梨?#xff0c;也就是說(shuō)看似一個(gè)正常的網(wǎng)頁(yè)鏈接,但點(diǎn)擊后不能打開(kāi)相對(duì)應(yīng)的網(wǎng)頁(yè)頁(yè)面。?
比如,原來(lái)在目錄為/seo下的所有鏈接,因?yàn)槟夸浀刂返母淖?#xff0c;現(xiàn)在都變成死鏈接了,那么我們可以用robots.txt把他屏蔽掉,代碼如下:?
Disallow: /seo/?
4、告訴搜索引擎你的sitemap.xml地址?
利用robots.txt可以告訴搜索引擎你sitemap.xml文件的地址,而不需要在網(wǎng)站上添加sitemap.xml的鏈接。具體代碼如下:?
Sitemap: 你的sitemap地址?
以上就是robots.txt的基本用法,一個(gè)好的網(wǎng)站必定會(huì)有一個(gè)好的robots.txt,因?yàn)閞obots.txt是搜索引擎了解你網(wǎng)站的一 個(gè)途徑。另外在這里我推薦一下一個(gè)比較適合wordpress用戶(hù)使用的robots.txt寫(xiě)法:?
User-agent: *?
Disallow: /wp-?
Disallow: /feed/?
Disallow: /comments/feed?
Disallow: /trackback/?
Sitemap: http://rainjer.com/sitemap.xml?
最后,如果你覺(jué)得上面所說(shuō)的還不能滿(mǎn)足你的需要,那么你可以在谷歌或百度官方提供的robots.txt使用指南學(xué)習(xí):?
百度:http://www.baidu.com/search/robots.html?
谷歌:http://www.google.com/support/forum/p/webmasters/thread?tid=4dbbe5f3cd2f6a13&hl=zh-CN
總結(jié)
以上是生活随笔為你收集整理的如何避免搜索引擎爬虫产生的流量过大以及搜索引擎设置优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 台州银行登录显示服务器异常,台州银行网上
- 下一篇: linux下载百度网盘文件