作者:韋瑋 如需轉載請聯(lián)系大數(shù)據(jù)(ID:hzdashuju) 01 網(wǎng)絡爬蟲實現(xiàn)原理詳解不同類型的網(wǎng)絡爬蟲,其實現(xiàn)原理也是不同的,但這些實現(xiàn)原理中,會存在很多共性。在此,我們將以兩種典型的網(wǎng)絡爬蟲為例(即通用網(wǎng)絡爬蟲和聚焦網(wǎng)絡爬蟲),分別為大家講解網(wǎng)絡爬蟲的實現(xiàn)原理。 1. 通用網(wǎng)絡爬蟲 首先我們來看通用網(wǎng)絡爬蟲的實現(xiàn)原理。通用網(wǎng)絡爬蟲的實現(xiàn)原理及過程可以簡要概括如下(見圖3-1)。 ▲圖3-1 通用網(wǎng)絡爬蟲的實現(xiàn)原理及過程
以上就是通用網(wǎng)絡爬蟲的實現(xiàn)過程與基本原理,接下來,我們?yōu)榇蠹曳治鼍劢咕W(wǎng)絡爬蟲的基本原理及其實現(xiàn)過程。 2. 聚焦網(wǎng)絡爬蟲 聚焦網(wǎng)絡爬蟲,由于其需要有目的地進行爬取,所以對于通用網(wǎng)絡爬蟲來說,必須要增加目標的定義和過濾機制,具體來說,此時,其執(zhí)行原理和過程需要比通用網(wǎng)絡爬蟲多出三步,即目標的定義、無關鏈接的過濾、下一步要爬取的URL地址的選取等,如圖3-2所示。 ▲圖3-2 聚焦網(wǎng)絡爬蟲的基本原理及其實現(xiàn)過程
現(xiàn)在我們初步掌握了網(wǎng)絡爬蟲的實現(xiàn)原理以及相應的工作流程,下面來了解網(wǎng)絡爬蟲的爬行策略。 02 爬行策略在網(wǎng)絡爬蟲爬取的過程,在待爬取的URL列表中,可能有很多URL地址,那么這些URL地址,爬蟲應該先爬取哪個,后爬取哪個呢? 在通用網(wǎng)絡爬蟲中,雖然爬取的順序并不是那么重要,但是在其他很多爬蟲中,比如聚焦網(wǎng)絡爬蟲中,爬取的順序非常重要,而爬取的順序,一般由爬行策略決定。我們將為大家介紹一些常見的爬行策略。 爬行策略主要有深度優(yōu)先爬行策略、廣度優(yōu)先爬行策略、大站優(yōu)先策略、反鏈策略、其他爬行策略等。下面我們將分別進行介紹。 如圖3-3所示,假設有一個網(wǎng)站,ABCDEFG分別為站點下的網(wǎng)頁,圖中箭頭表示網(wǎng)頁的層次結構。 ▲圖3-3 某網(wǎng)站的網(wǎng)頁層次結構示意圖 假如此時網(wǎng)頁ABCDEFG都在爬行隊列中,那么按照不同的爬行策略,其爬取的順序是不同的。 比如,如果按照深度優(yōu)先爬行策略去爬取的話,那么此時會首先爬取一個網(wǎng)頁,然后將這個網(wǎng)頁的下層鏈接依次深入爬取完再返回上一層進行爬取。 所以,若按深度優(yōu)先爬行策略,圖3-3中的爬行順序可以是:A → D → E → B → C → F → G。 如果按照廣度優(yōu)先的爬行策略去爬取的話,那么此時首先會爬取同一層次的網(wǎng)頁,將同一層次的網(wǎng)頁全部爬取完后,在選擇下一個層次的網(wǎng)頁去爬行,比如,上述的網(wǎng)站中,如果按照廣度優(yōu)先的爬行策略去爬取的話,爬行順序可以是:A→B→C→D→E→F→G。 除了以上兩種爬行策略之外,我們還可以采用大站爬行策略。我們可以按對應網(wǎng)頁所屬的站點進行歸類,如果某個網(wǎng)站的網(wǎng)頁數(shù)量多,那么我們則將其稱為大站,按照這種策略,網(wǎng)頁數(shù)量越多的網(wǎng)站越大,然后,優(yōu)先爬取大站中的網(wǎng)頁URL地址。 一個網(wǎng)頁的反向鏈接數(shù),指的是該網(wǎng)頁被其他網(wǎng)頁指向的次數(shù),這個次數(shù)在一定程度上代表著該網(wǎng)頁被其他網(wǎng)頁的推薦次數(shù)。所以,如果按反鏈策略去爬行的話,那么哪個網(wǎng)頁的反鏈數(shù)量越多,則哪個網(wǎng)頁將被優(yōu)先爬取。 但是,在實際情況中,如果單純按反鏈策略去決定一個網(wǎng)頁的優(yōu)先程度的話,那么可能會出現(xiàn)大量的作弊情況。比如,做一些垃圾站群,并將這些網(wǎng)站互相鏈接,如果這樣的話,每個站點都將獲得較高的反鏈,從而達到作弊的目的。 作為爬蟲項目方,我們當然不希望受到這種作弊行為的干擾,所以,如果采用反向鏈接策略去爬取的話,一般會考慮可靠的反鏈數(shù)。 除了以上這些爬行策略,在實際中還有很多其他的爬行策略,比如OPIC策略、Partial PageRank策略等。 03 網(wǎng)頁更新策略一個網(wǎng)站的網(wǎng)頁經常會更新,作為爬蟲方,在網(wǎng)頁更新后,我們則需要對這些網(wǎng)頁進行重新爬取,那么什么時候去爬取合適呢?如果網(wǎng)站更新過慢,而爬蟲爬取得過于頻繁,則必然會增加爬蟲及網(wǎng)站服務器的壓力,若網(wǎng)站更新較快,但是爬蟲爬取的時間間隔較長,則我們爬取的內容版本會過老,不利于新內容的爬取。 顯然,網(wǎng)站的更新頻率與爬蟲訪問網(wǎng)站的頻率越接近,則效果越好,當然,爬蟲服務器資源有限的時候,此時爬蟲也需要根據(jù)對應策略,讓不同的網(wǎng)頁具有不同的更新優(yōu)先級,優(yōu)先級高的網(wǎng)頁更新,將獲得較快的爬取響應。 具體來說,常見的網(wǎng)頁更新策略主要有3種:用戶體驗策略、歷史數(shù)據(jù)策略、聚類分析策略等,以下我們將分別進行講解。 在搜索引擎查詢某個關鍵詞的時候,會出現(xiàn)一個排名結果,在排名結果中,通常會有大量的網(wǎng)頁,但是,大部分用戶都只會關注排名靠前的網(wǎng)頁,所以,在爬蟲服務器資源有限的情況下,爬蟲會優(yōu)先更新排名結果靠前的網(wǎng)頁。 這種更新策略,我們稱之為用戶體驗策略,那么在這種策略中,爬蟲到底何時去爬取這些排名結果靠前的網(wǎng)頁呢?此時,爬取中會保留對應網(wǎng)頁的多個歷史版本,并進行對應分析,依據(jù)這多個歷史版本的內容更新、搜索質量影響、用戶體驗等信息,來確定對這些網(wǎng)頁的爬取周期。 除此之外,我們還可以使用歷史數(shù)據(jù)策略來確定對網(wǎng)頁更新爬取的周期。比如,我們可以依據(jù)某一個網(wǎng)頁的歷史更新數(shù)據(jù),通過泊松過程進行建模等手段,預測該網(wǎng)頁下一次更新的時間,從而確定下一次對該網(wǎng)頁爬取的時間,即確定更新周期。 以上兩種策略,都需要歷史數(shù)據(jù)作為依據(jù)。有的時候,若一個網(wǎng)頁為新網(wǎng)頁,則不會有對應的歷史數(shù)據(jù),并且,如果要依據(jù)歷史數(shù)據(jù)進行分析,則需要爬蟲服務器保存對應網(wǎng)頁的歷史版本信息,這無疑給爬蟲服務器帶來了更多的壓力和負擔。 如果想要解決這些問題,則需要采取新的更新策略。比較常用的是聚類分析策略。那么什么是聚類分析策略呢? 在生活中,相信大家對分類已經非常熟悉,比如我們去商場,商場中的商品一般都分好類了,方便顧客去選購相應的商品,此時,商品分類的類別是固定的,是已經擬定好的。 但是,假如商品的數(shù)量巨大,事先無法對其進行分類,或者說,根本不知道將會擁有哪些類別的商品,此時,我們應該如何解決將商品歸類的問題呢? 這時候我們可以用聚類的方式解決,依據(jù)商品之間的共性進行相應分析,將共性較多的商品聚為一類,此時,商品聚集成的類的數(shù)目是不一定的,但是能保證的是,聚在一起的商品之間一定有某種共性,即依據(jù)“物以類聚”的思想去實現(xiàn)。 同樣,在我們的聚類算法中,也會有類似的分析過程。 將聚類分析算法運用在爬蟲對網(wǎng)頁的更新上,我們可以這樣做,如圖3-4所示。 ▲圖3-4 網(wǎng)頁更新策略之聚類算法
以上,就是使用爬蟲爬取網(wǎng)頁的時候,常見的3種更新策略,我們掌握了其算法思想后,在后續(xù)我們進行爬蟲的實際開發(fā)的時候,編寫出來的爬蟲執(zhí)行效率會更高,并且執(zhí)行邏輯會更合理。 04 網(wǎng)頁分析算法在搜索引擎中,爬蟲爬取了對應的網(wǎng)頁之后,會將網(wǎng)頁存儲到服務器的原始數(shù)據(jù)庫中,之后,搜索引擎會對這些網(wǎng)頁進行分析并確定各網(wǎng)頁的重要性,即會影響用戶檢索的排名結果。 所以在此,我們需要對搜索引擎的網(wǎng)頁分析算法進行簡單了解。 搜索引擎的網(wǎng)頁分析算法主要分為3類:基于用戶行為的網(wǎng)頁分析算法、基于網(wǎng)絡拓撲的網(wǎng)頁分析算法、基于網(wǎng)頁內容的網(wǎng)頁分析算法。接下來我們分別對這些算法進行講解。 1. 基于用戶行為的網(wǎng)頁分析算法 基于用戶行為的網(wǎng)頁分析算法是比較好理解的。這種算法中,會依據(jù)用戶對這些網(wǎng)頁的訪問行為,對這些網(wǎng)頁進行評價,比如,依據(jù)用戶對該網(wǎng)頁的訪問頻率、用戶對網(wǎng)頁的訪問時長、用戶的單擊率等信息對網(wǎng)頁進行綜合評價。 2. 基于網(wǎng)絡拓撲的網(wǎng)頁分析算法 基于網(wǎng)絡拓撲的網(wǎng)頁分析算法是依靠網(wǎng)頁的鏈接關系、結構關系、已知網(wǎng)頁或數(shù)據(jù)等對網(wǎng)頁進行分析的一種算法,所謂拓撲,簡單來說即結構關系的意思。 基于網(wǎng)絡拓撲的網(wǎng)頁分析算法,同樣主要可以細分為3種類型:基于網(wǎng)頁粒度的分析算法、基于網(wǎng)頁塊粒度的分析算法、基于網(wǎng)站粒度的分析算法。 PageRank算法是一種比較典型的基于網(wǎng)頁粒度的分析算法。相信很多朋友都聽過Page-Rank算法,它是谷歌搜索引擎的核心算法,簡單來說,它會根據(jù)網(wǎng)頁之間的鏈接關系對網(wǎng)頁的權重進行計算,并可以依靠這些計算出來的權重,對網(wǎng)頁進行排名。 當然,具體的算法細節(jié)有很多,在此不展開講解。除了PageRank算法之外,HITS算法也是一種常見的基于網(wǎng)頁粒度的分析算法。 基于網(wǎng)頁塊粒度的分析算法,也是依靠網(wǎng)頁間鏈接關系進行計算的,但計算規(guī)則有所不同。 我們知道,在一個網(wǎng)頁中通常會包含多個超鏈接,但一般其指向的外部鏈接中并不是所有的鏈接都與網(wǎng)站主題相關,或者說,這些外部鏈接對該網(wǎng)頁的重要程度是不一樣的,所以若要基于網(wǎng)頁塊粒度進行分析,則需要對一個網(wǎng)頁中的這些外部鏈接劃分層次,不同層次的外部鏈接對于該網(wǎng)頁來說,其重要程度不同。 這種算法的分析效率和準確率,會比傳統(tǒng)的算法好一些。 基于網(wǎng)站粒度的分析算法,也與PageRank算法類似,但是,如果采用基于網(wǎng)站粒度進行分析,相應的,會使用SiteRank算法。即此時我們會劃分站點的層次和等級,而不再具體地計算站點下的各個網(wǎng)頁的等級。 所以其相對于基于網(wǎng)頁粒度的算法來說,則更加簡單高效,但是會帶來一些缺點,比如精確度不如基于網(wǎng)頁粒度的分析算法精確。 3. 基于網(wǎng)頁內容的網(wǎng)頁分析算法 在基于網(wǎng)頁內容的網(wǎng)頁分析算法中,會依據(jù)網(wǎng)頁的數(shù)據(jù)、文本等網(wǎng)頁內容特征,對網(wǎng)頁進行相應的評價。 以上,我簡單為大家介紹了搜索引擎中的網(wǎng)頁分析算法,我們學習爬蟲,需要對這些算法進行相應的了解。 05 身份識別在爬蟲對網(wǎng)頁爬取的過程中,爬蟲必然需要訪問對應的網(wǎng)頁,正規(guī)的爬蟲一般會告訴對應網(wǎng)頁的網(wǎng)站站長其爬蟲身份。網(wǎng)站的管理員則可以通過爬蟲告知的身份信息對爬蟲的身份進行識別,我們稱這個過程為爬蟲的身份識別過程。 那么,爬蟲應該如何告知網(wǎng)站站長自己的身份呢? 一般地,爬蟲在對網(wǎng)頁進行爬取訪問的時候,會通過HTTP請求中的User Agent字段告知自己的身份信息。一般爬蟲訪問一個網(wǎng)站的時候,首先會根據(jù)該站點下的Robots.txt文件來確定可爬取的網(wǎng)頁范圍,Robots協(xié)議是需要網(wǎng)絡爬蟲共同遵守的協(xié)議,對于一些禁止的URL地址,網(wǎng)絡爬蟲則不應爬取訪問。 同時,如果爬蟲在爬取某一個站點時陷入死循環(huán),造成該站點的服務壓力過大,如果有正確的身份設置,那么該站點的站長則可以想辦法聯(lián)系到該爬蟲方,然后停止對應的爬蟲程序。 當然,有些爬蟲會偽裝成其他爬蟲或瀏覽器去爬取網(wǎng)站,以獲得一些額外數(shù)據(jù),或者有些爬蟲,會無視Robots協(xié)議的限制而任意爬取。從技術的角度來說,這些行為實現(xiàn)起來不難,但是這些行為是我們不提倡的,因為只有共同遵守一個良好的網(wǎng)絡規(guī)則,才能夠達到爬蟲方和站點服務方的雙贏。 06 網(wǎng)絡爬蟲實現(xiàn)技術通過前面的學習,我們基本上對爬蟲的基本理論知識有了比較全面的了解,那么,如果我們要實現(xiàn)網(wǎng)絡爬蟲技術,要開發(fā)自己的網(wǎng)絡爬蟲,可以使用哪些語言進行開發(fā)呢? 開發(fā)網(wǎng)絡爬蟲的語言有很多,常見的語言有:Python、Java、PHP、Node.JS、C 、Go語言等。以下我們將分別介紹一下用這些語言寫爬蟲的特點:
07 小結
|
|
來自: 東西二王 > 《數(shù)據(jù)技術》