多次被人問(wèn)到這個(gè)問(wèn)題,看來(lái)需要做一點(diǎn)說(shuō)明,這里簡(jiǎn)單介紹一下搜索引擎的機器爬蟲(chóng)的制作和一些基本要注意的事項。
說(shuō)的簡(jiǎn)單易懂一些,網(wǎng)絡(luò )爬蟲(chóng)跟你使用的〖離線(xiàn)閱讀〗工具差不多。說(shuō)離線(xiàn),其實(shí)還是要跟網(wǎng)絡(luò )聯(lián)結,否則怎么抓東西下來(lái)?
那么不同的地方在哪里?
1】 網(wǎng)絡(luò )爬蟲(chóng)高度可配置性。
2】 網(wǎng)絡(luò )爬蟲(chóng)可以解析抓到的網(wǎng)頁(yè)里的鏈接
3】 網(wǎng)絡(luò )爬蟲(chóng)有簡(jiǎn)單的存儲配置
4】 網(wǎng)絡(luò )爬蟲(chóng)擁有智能的根據網(wǎng)頁(yè)更新分析功能
5】 網(wǎng)絡(luò )爬蟲(chóng)的效率相當的高
那么依據特征,其實(shí)也就是要求了,如何設計爬蟲(chóng)呢?要注意哪些步驟呢?
1】 url 的遍歷和紀錄
這點(diǎn) larbin 做得非常的好,其實(shí)對于url的遍歷是很簡(jiǎn)單的,例如:
cat [what you got]| tr " \n | gawk ‘{print $2}‘ | pcregrep ^http://
就可以得到一個(gè)所由的 url 列表
2】多進(jìn)程 VS 多線(xiàn)程
各有優(yōu)點(diǎn)了,現在一臺普通的PC 例如 booso.com 一天可以輕松爬下5個(gè)G的數據。大約20萬(wàn)網(wǎng)頁(yè)。
3】時(shí)間更新控制
最傻的做法是沒(méi)有時(shí)間更新權重,一通的爬,回頭再一通的爬。
通常在下一次爬的的數據要跟上一次進(jìn)行比較,如果連續5次都沒(méi)有變化,那么將爬這個(gè)網(wǎng)頁(yè)的時(shí)間間隔擴大1倍。
如果一個(gè)網(wǎng)頁(yè)在連續5次爬取的時(shí)候都有更新,那么將設置的爬取時(shí)間縮短為原來(lái)的1/2。
注意,效率是取勝的關(guān)鍵之一。
4】爬的深度是多少呢?
看情況了。如果你比較牛,有幾萬(wàn)臺服務(wù)器做網(wǎng)絡(luò )爬蟲(chóng),我勸您跳過(guò)這一點(diǎn)。
如果你同我一樣只有一臺服務(wù)器做網(wǎng)絡(luò )爬蟲(chóng),那么這樣一個(gè)統計您應該知道:
網(wǎng)頁(yè)深度:網(wǎng)頁(yè)個(gè)數:網(wǎng)頁(yè)重要程度
0 : 1 : : 10
1 :20 : :8
2: :600: :5
3: :2000: :2
4 above: 6000: 一般無(wú)法計算
好了,爬到三級就差不多了,再深入一是數據量擴大了3/4倍,二是重要度確下降了許多,這叫做“種下的是龍種,收獲的是跳蚤。”
5】爬蟲(chóng)一般不之間爬對方的網(wǎng)頁(yè),一般是通過(guò)一個(gè)Proxy出去,這個(gè)proxy有緩解壓力的功能,因為當對方的網(wǎng)頁(yè)沒(méi)有更新的時(shí)候,只要拿到 header 的 tag就可以了,沒(méi)有必要全部傳輸一次了,可以大大節約網(wǎng)絡(luò )帶寬。
apache webserver里面紀錄的 304 一般就是被cache的了。
6】請有空的時(shí)候照看一下robots.txt
7】存儲結構。
這個(gè)人人見(jiàn)智,google 用 gfs 系統,如果你有7/8臺服務(wù)器,我勸你用NFS系統,要是你有70/80個(gè)服務(wù)器的話(huà)我建議你用afs 系統,要是你只有一臺服務(wù)器,那么隨便。
給一個(gè)代碼片斷,是我寫(xiě)的新聞搜索引擎是如何進(jìn)行數據存儲的:
NAME=`echo $URL |perl -p -e ‘s/([^w-.@])/$1 eq "
" ? "
":sprintf("%%%2.2x",ord($1))/eg‘`
mkdir -p $AUTHOR
newscrawl.pl $URL --user-agent="news.booso.com+(+http://booso.com)" -outfile=$AUTHOR/$NAME
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。