1. 網路爬蟲實現原理
以兩種爬蟲為例,講解網路爬蟲的實現原理。
1) 通用網路爬蟲
圖1 通用網路爬蟲實現原理及過程
見圖1,通用網路爬蟲的實現原理及過程可以簡要概括為:
i. 獲取初始url。初始的url位址可以由使用者人為指定,也可以由使用者指定的某個或某幾個初始爬去網頁決定。
ii. 根據初始的url爬取頁面,並獲得新的url。獲得初始的url位址之後,首先需要爬取對應url位址中的網頁,爬取了對應的url位址中的網頁後,將網頁儲存到原始資料庫中,並且在爬取網頁的同時,發現新的url位址,同時將已爬取的url位址存放到乙個url列表中,用於去重合以及判斷爬取的程序。
iii. 將新的url放到url佇列中。
iv. 從url佇列中讀取信的url,並依據信的url爬取網頁,同時從新網頁中獲取新url,並重複上述的過程。
v. 滿足爬蟲設定的停止條件時,停止爬取。
2) 聚焦網路爬蟲
聚焦網路爬蟲,由於其需要有目的地進行爬取,所以對於通用網路爬蟲來說,必須增加目標的定義和過濾機制。因此其執行原理比通用網路爬蟲多出三步:目標的定義,無關鏈結的過濾,下一步要爬取的url位址的選取等。其實現原理及過程可以簡要概括為:
i. 對爬取目標的定義和描述。
ii. 獲取初始url。
iii. 根據初始的url爬取頁面,獲得新的url。
iv. 從新的url中過濾掉與爬取目標無關的鏈結。因為聚焦網路對網頁爬取是有目的性的,所以與目標無關的網頁將會被過濾掉。同時,也需要將已爬取的url位址存放到乙個url佇列中,用於去重合及判斷爬取的程序。
v. 將過濾後的url放到url佇列中,
vi. 從url佇列中,根據搜尋演算法,確定url的優先順序,並確定下一步要爬取的url位址。由於聚焦網路爬蟲具有目的性,故而下一步爬取哪些url位址相對來說是比較重要的。
viii. 滿足停止條件,或無法獲取新的url位址時,停止爬行。
2. 爬行策略
我們已經介紹了,聚焦網路爬蟲,需要確定url的優先順序,即爬蟲應該先爬取哪乙個,後爬取哪乙個?
爬行策略主要有:深度優先爬行策略、廣度優先爬行策略、大站優先爬行策略、反鏈策略、其他爬行策略等。
圖2 某**的網頁層次結構示意圖
如圖2所示,假設有乙個**,abcdefg分別為站點下的網頁,途中箭頭表示網頁的層次結構。
假如此時網頁abcdefg都在爬行佇列中,那麼按照不同的爬行策略,其爬取的順序是不同的。
比如按照深度優先的順序,爬取順序可能是a->d->e->b->c->f->g;按照廣度優先的爬行策略,爬行順序可能是a->b->c->d->e->f->g。
我們也可以採用大站爬行策略。我們可以按對應網頁所屬的站點進行歸類,如果某個**的網頁數量多,那麼則稱其為大站,按照這種策略,網頁數量越多的**優先順序越高。
乙個**的反鏈結數,指的是被其他網頁指向的次數,這個次數在一定程度上代表著該網頁被其他網頁的推薦次數。所以,如果按反鏈策略去爬行的話,所以如果按反鏈策略去爬行的話,那麼哪個網頁的優先順序越高。
其他爬行策略還有很多,比如:opic策略,partialpagerank策略等。
3. 網頁更新策略
乙個**的網頁經常會更新,作為爬蟲方,在網頁更新後,我們則需要對這些網頁進行重新爬取,那麼什麼時候去爬取合適呢?如果**更新過慢,而爬蟲爬取的過於頻繁,則會帶來伺服器資源的浪費。若**更新過快,但爬蟲提取的時間間隔較長,則我們爬去的內容版本會過老,不利於新內容的爬取。顯然,**的更新頻率與爬蟲訪問**的頻率越接近,則效果越好,當然,爬蟲伺服器資源有限的時候,此時爬蟲也需要根據對應的策略,讓不同網頁具有不同的更新優先順序,優先極高的網頁更新,將獲得較快的爬取響應。
常見的網頁更新策略主要有3種:使用者體驗策略,
4. 網頁分析演算法
5. 身份識別
6. 網路爬蟲實現技術
7. 例項-metaseeker
08 網路爬蟲
原理 httprequest 新聞伺服器 dom 文件 爬蟲應用 dom 解析 資料庫 網路爬蟲之dom解析 document element elements jsoup html 解析器 匯入jsoup 1.6.3.jar 網路爬蟲的步驟 1 網路請求 請求url 2 得到dom文件 docum...
0302網路爬蟲
1 正規表示式 通用的字串表達框架,簡潔表達一組字串的表示式。針對字串表達 簡潔 和 特徵 思想的工具。判斷某字串的特徵歸屬。主要應用在字串匹配中 正規表示式在文字處理中常用 表達文字型別的特徵 病毒 入侵等 同時查詢或替換一組字串 匹配字串的全部或部分。正規表示式的使用 編譯 將符合正規表示式語法...
16 網路爬蟲
爬取整個靜態網頁 並存入檔案。第乙個引數是 要帶協議 http 二三引數可選,意思暫時不知道 動態的暫時不會。加request import urllib2 request urllib2.request response urllib2.urlopen request print response...