2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

網(wǎng)絡爬蟲實現(xiàn)原理與技術,終于有人講明白了(值得收藏)

 東西二王 2019-05-09

導讀:在《什么是網(wǎng)絡爬蟲?有什么用?怎么爬?終于有人講明白了》一文中,我們已經初步認識了網(wǎng)絡爬蟲,并了解了網(wǎng)絡爬蟲的應用領域。本文我們將學習網(wǎng)絡爬蟲的實現(xiàn)原理及其實現(xiàn)技術。

作者:韋瑋

如需轉載請聯(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)。

網(wǎng)絡爬蟲實現(xiàn)原理與技術,終于有人講明白了(值得收藏)

▲圖3-1 通用網(wǎng)絡爬蟲的實現(xiàn)原理及過程

  1. 獲取初始的URL。初始的URL地址可以由用戶人為地指定,也可以由用戶指定的某個或某幾個初始爬取網(wǎng)頁決定。
  2. 根據(jù)初始的URL爬取頁面并獲得新的URL。獲得初始的URL地址之后,首先需要爬取對應URL地址中的網(wǎng)頁,爬取了對應的URL地址中的網(wǎng)頁后,將網(wǎng)頁存儲到原始數(shù)據(jù)庫中,并且在爬取網(wǎng)頁的同時,發(fā)現(xiàn)新的URL地址,同時將已爬取的URL地址存放到一個URL列表中,用于去重及判斷爬取的進程。
  3. 將新的URL放到URL隊列中。在第2步中,獲取了下一個新的URL地址之后,會將新的URL地址放到URL隊列中。
  4. 從URL隊列中讀取新的URL,并依據(jù)新的URL爬取網(wǎng)頁,同時從新網(wǎng)頁中獲取新URL,并重復上述的爬取過程。
  5. 滿足爬蟲系統(tǒng)設置的停止條件時,停止爬取。在編寫爬蟲的時候,一般會設置相應的停止條件。如果沒有設置停止條件,爬蟲則會一直爬取下去,一直到無法獲取新的URL地址為止,若設置了停止條件,爬蟲則會在停止條件滿足時停止爬取。

以上就是通用網(wǎng)絡爬蟲的實現(xiàn)過程與基本原理,接下來,我們?yōu)榇蠹曳治鼍劢咕W(wǎng)絡爬蟲的基本原理及其實現(xiàn)過程。

2. 聚焦網(wǎng)絡爬蟲

聚焦網(wǎng)絡爬蟲,由于其需要有目的地進行爬取,所以對于通用網(wǎng)絡爬蟲來說,必須要增加目標的定義和過濾機制,具體來說,此時,其執(zhí)行原理和過程需要比通用網(wǎng)絡爬蟲多出三步,即目標的定義、無關鏈接的過濾、下一步要爬取的URL地址的選取等,如圖3-2所示。

網(wǎng)絡爬蟲實現(xiàn)原理與技術,終于有人講明白了(值得收藏)

▲圖3-2 聚焦網(wǎng)絡爬蟲的基本原理及其實現(xiàn)過程

  1. 對爬取目標的定義和描述。在聚焦網(wǎng)絡爬蟲中,我們首先要依據(jù)爬取需求定義好該聚焦網(wǎng)絡爬蟲爬取的目標,以及進行相關的描述。
  2. 獲取初始的URL。
  3. 根據(jù)初始的URL爬取頁面,并獲得新的URL。
  4. 從新的URL中過濾掉與爬取目標無關的鏈接。因為聚焦網(wǎng)絡爬蟲對網(wǎng)頁的爬取是有目的性的,所以與目標無關的網(wǎng)頁將會被過濾掉。同時,也需要將已爬取的URL地址存放到一個URL列表中,用于去重和判斷爬取的進程。
  5. 將過濾后的鏈接放到URL隊列中。
  6. 從URL隊列中,根據(jù)搜索算法,確定URL的優(yōu)先級,并確定下一步要爬取的URL地址。在通用網(wǎng)絡爬蟲中,下一步爬取哪些URL地址,是不太重要的,但是在聚焦網(wǎng)絡爬蟲中,由于其具有目的性,故而下一步爬取哪些URL地址相對來說是比較重要的。對于聚焦網(wǎng)絡爬蟲來說,不同的爬取順序,可能導致爬蟲的執(zhí)行效率不同,所以,我們需要依據(jù)搜索策略來確定下一步需要爬取哪些URL地址。
  7. 從下一步要爬取的URL地址中,讀取新的URL,然后依據(jù)新的URL地址爬取網(wǎng)頁,并重復上述爬取過程。
  8. 滿足系統(tǒng)中設置的停止條件時,或無法獲取新的URL地址時,停止爬行。

現(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)頁的層次結構。

網(wǎng)絡爬蟲實現(xiàn)原理與技術,終于有人講明白了(值得收藏)

▲圖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策略等。

網(wǎng)絡爬蟲實現(xiàn)原理與技術,終于有人講明白了(值得收藏)

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所示。

網(wǎng)絡爬蟲實現(xiàn)原理與技術,終于有人講明白了(值得收藏)

▲圖3-4 網(wǎng)頁更新策略之聚類算法

  1. 首先,經過大量的研究發(fā)現(xiàn),網(wǎng)頁可能具有不同的內容,但是一般來說,具有類似屬性的網(wǎng)頁,其更新頻率類似。這是聚類分析算法運用在爬蟲網(wǎng)頁的更新上的一個前提指導思想。
  2. 有了1中的指導思想后,我們可以首先對海量的網(wǎng)頁進行聚類分析,在聚類之后,會形成多個類,每個類中的網(wǎng)頁具有類似的屬性,即一般具有類似的更新頻率。
  3. 聚類完成后,我們可以對同一個聚類中的網(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)絡爬蟲實現(xiàn)原理與技術,終于有人講明白了(值得收藏)

基于網(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ī)則,才能夠達到爬蟲方和站點服務方的雙贏。

網(wǎng)絡爬蟲實現(xiàn)原理與技術,終于有人講明白了(值得收藏)

06 網(wǎng)絡爬蟲實現(xiàn)技術

通過前面的學習,我們基本上對爬蟲的基本理論知識有了比較全面的了解,那么,如果我們要實現(xiàn)網(wǎng)絡爬蟲技術,要開發(fā)自己的網(wǎng)絡爬蟲,可以使用哪些語言進行開發(fā)呢?

開發(fā)網(wǎng)絡爬蟲的語言有很多,常見的語言有:Python、Java、PHP、Node.JS、C 、Go語言等。以下我們將分別介紹一下用這些語言寫爬蟲的特點:

  • Python:爬蟲框架非常豐富,并且多線程的處理能力較強,并且簡單易學、代碼簡潔,優(yōu)點很多。
  • Java:適合開發(fā)大型爬蟲項目。
  • PHP:后端處理很強,代碼很簡潔,模塊也較豐富,但是并發(fā)能力相對來說較弱。
  • Node.JS:支持高并發(fā)與多線程處理。
  • C :運行速度快,適合開發(fā)大型爬蟲項目,成本較高。
  • Go語言:同樣高并發(fā)能力非常強。

07 小結

  1. 聚焦網(wǎng)絡爬蟲,由于其需要有目的地進行爬取,所以對于通用網(wǎng)絡爬蟲來說,必須要增加目標的定義和過濾機制,具體來說,此時,其執(zhí)行原理和過程需要比通用網(wǎng)絡爬蟲多出3步,即目標的定義、無關鏈接的過濾、下一步要爬取的URL地址的選取。
  2. 常見的網(wǎng)頁更新策略主要有3種:用戶體驗策略、歷史數(shù)據(jù)策略、聚類分析策略。
  3. 聚類分析可以依據(jù)商品之間的共性進行相應的處理,將共性較多的商品聚為一類。
  4. 在爬蟲對網(wǎng)頁爬取的過程中,爬蟲必然需要訪問對應的網(wǎng)頁,此時,正規(guī)的爬蟲一般會告訴對應網(wǎng)頁的網(wǎng)站站長其爬蟲身份。網(wǎng)站的管理員則可以通過爬蟲告知的身份信息對爬蟲的身份進行識別,我們稱這個過程為爬蟲的身份識別過程。
  5. 開發(fā)網(wǎng)絡爬蟲的語言有很多,常見的語言有Python、Java、PHP、Node.JS、C 、Go語言等。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多