說的簡單易懂一些,網絡爬蟲跟你使用的?離線閱讀?工具差不多。說離線,其實還是要跟網絡聯結,否則怎么抓東西下來?那么不同的地方在哪里?

1)網絡爬蟲高度可配置性。

2)網絡爬蟲可以解析抓到的網頁里的鏈接

3)網絡爬蟲有簡單的存儲配置

4)網絡爬蟲擁有智能的根據網頁更新分析功能

5)網絡爬蟲的效率相當的高

那么依據特征,其實也就是要求了,如何設計爬蟲呢?要注重哪些步驟呢?

1)url 的遍歷和紀錄

這點 larbin 做得非常的好,其實對于url的遍歷是很簡單的,例如:

cat [what you got]  tr \" \\n   gawk '{print $2}'   pcregrep ^http://

就可以得到一個所由的 url 列表

2)多進程 VS 多線程

各有優點了,現在一臺普通的PC 例如 booso.com 一天可以輕松爬下5個G的數據。大約20萬網頁。

3)時間更新控制

最傻的做法是沒有時間更新權重,一通的爬,回頭再一通的爬。

通常在下一次爬的的數據要跟上一次進行比較,假如連續5次都沒有變化,那么將爬這個網頁的時間間隔擴大1倍。

假如一個網頁在連續5次爬取的時候都有更新,那么將設置的爬取時間縮短為原來的1/2。

注重,效率是取勝的要害之一。

4)爬的深度是多少呢?

看情況了。假如你比較牛,有幾萬臺伺服器做網絡爬蟲,我勸您跳過這一點。

假如你同我一樣只有一臺伺服器做網絡爬蟲,那么這樣一個統計您應該知道:

網頁深度:網頁個數:網頁重要程度

0 : 1 : : 10

1 :20 : :8

2: :600: :5

3: :2000: :2

4 above: 6000: 一般無法計算

好了,爬到三級就差不多了,再深入一是數據量擴大了3/4倍,二是重要度確下降了許多,這叫做“種下的是龍種,收獲的是跳蚤。

5)爬蟲一般不之間爬對方的網頁,一般是通過一個Proxy出去,這個proxy有緩解壓力的功能,因為當對方的網頁沒有更新的時候,只要拿到 header 的 tag就可以了,沒有必要全部傳輸一次了,可以大大節約網絡帶寬。

apache webserver里面紀錄的 304 一般就是被cache的了。

6)請有空的時候照看一下robots.txt

7)存儲結構。

這個人人見智,google 用 gfs 系統,假如你有7/8臺伺服器,我勸你用NFS系統,要是你有70/80個伺服器的話我建議你用afs 系統,要是你只有一臺伺服器,那么隨便。

給一個代碼片斷,是我寫的新聞搜索引擎是如何進行數據存儲的:

NAME=`echo $URL  perl -p -e 's/([^\w\-\.\@])/$1 eq "\n" ? "\n":sprintf("%%%2.2x",ord($1))/eg'`mkdir -p $AUTHOR

newscrawl.pl$URL--user-agent="news.booso.com ( http://booso.com)"-outfile=$AUTHOR/$NAME


非凡是注重以下幾句:

1.通常在下一次爬的的數據要跟上一次進行比較,假如連續5次都沒有變化,那么將爬這個網頁的時間間隔擴大1倍,假如一個網頁在連續5次爬取的時候都有更新,那么將設置的爬取時間縮短為原來的1/2。

網頁更新頻度嚴重影響著搜索引擎蜘蛛程度對網站的爬行,爬取次數越多意味著網頁收錄幾率會越大、收錄數量越多,收錄是SEO最基礎的一個環節。

2.好了,爬到三級就差不多了,再深入一是數據量擴大了3/4倍,二是重要度確下降了許多,這叫做“種下的是龍種,收獲的是跳蚤。

盡量將網站保持在三級目錄內,深層次的網頁會給搜索引擎帶來很大的壓力,當然,我想Google有足夠的伺服器來承擔這些壓力,但從側面來說,3層目錄下的網頁被抓取及更新的頻度要低很多。前面,我說過,要想辦法使網站物理結構和邏輯結構吻合,這體現于URL的良好設計,現在你可以檢查下前臺生成的靜態網頁的實際目錄有幾層,考慮是否可以優化

arrow
arrow
    全站熱搜

    EMBA的小眼睛 發表在 痞客邦 留言(0) 人氣()