終於有人把網路爬蟲講明白了

wade1203發表於2019-04-10

摘要Python網路爬蟲的詳盡解釋。


導讀:網路爬蟲也叫做網路機器人,可以代替人們自動地在網際網路中進行資料資訊的採集與整理。在大資料時代,資訊的採集是一項重要的工作,如果單純靠人力進行資訊採集,不僅低效繁瑣,蒐集的成本也會提高。


此時,我們可以使用網路爬蟲對資料資訊進行自動採集,比如應用於搜尋引擎中對站點進行爬取收錄,應用於資料分析與挖掘中對資料進行採集,應用於金融分析中對金融資料進行採集,除此之外,還可以將網路爬蟲應用於輿情監測與分析、目標客戶資料的收集等各個領域。


當然,要學習網路爬蟲開發,首先需要認識網路爬蟲,下面就來一起認識幾種典型的網路爬蟲,並瞭解網路爬蟲的各項常見功能。


作者 | 韋瑋

來源 | 大資料(ID:hzdashuju)

本文摘編自《精通Python網路爬蟲:核心技術、框架與專案實戰》,作者:韋瑋



01 什麼是網路爬蟲


隨著大資料時代的來臨,網路爬蟲在網際網路中的地位將越來越重要。網際網路中的資料是海量的,如何自動高效地獲取網際網路中我們感興趣的資訊併為我們所用是一個重要的問題,而爬蟲技術就是為了解決這些問題而生的。


我們感興趣的資訊分為不同的型別:如果只是做搜尋引擎,那麼感興趣的資訊就是網際網路中儘可能多的高質量網頁;如果要獲取某一垂直領域的資料或者有明確的檢索需求,那麼感興趣的資訊就是根據我們的檢索和需求所定位的這些資訊,此時,需要過濾掉一些無用資訊。前者我們稱為通用網路爬蟲,後者我們稱為聚焦網路爬蟲


1. 初識網路爬蟲


網路爬蟲又稱網路蜘蛛、網路螞蟻、網路機器人等,可以自動化瀏覽網路中的資訊,當然瀏覽資訊的時候需要按照我們制定的規則進行,這些規則我們稱之為網路爬蟲演算法。使用Python可以很方便地編寫出爬蟲程式,進行網際網路資訊的自動化檢索。


搜尋引擎離不開爬蟲,比如百度搜尋引擎的爬蟲叫作百度蜘蛛(Baiduspider)。百度蜘蛛每天會在海量的網際網路資訊中進行爬取,爬取優質資訊並收錄,當使用者在百度搜尋引擎上檢索對應關鍵詞時,百度將對關鍵詞進行分析處理,從收錄的網頁中找出相關網頁,按照一定的排名規則進行排序並將結果展現給使用者。


在這個過程中,百度蜘蛛起到了至關重要的作用。那麼,如何覆蓋網際網路中更多的優質網頁?又如何篩選這些重複的頁面?這些都是由百度蜘蛛爬蟲的演算法決定的。採用不同的演算法,爬蟲的執行效率會不同,爬取結果也會有所差異。


所以,我們在研究爬蟲的時候,不僅要了解爬蟲如何實現,還需要知道一些常見爬蟲的演算法,如果有必要,我們還需要自己去制定相應的演算法,在此,我們僅需要對爬蟲的概念有一個基本的瞭解。


除了百度搜尋引擎離不開爬蟲以外,其他搜尋引擎也離不開爬蟲,它們也擁有自己的爬蟲。比如360的爬蟲叫360Spider,搜狗的爬蟲叫Sogouspider,必應的爬蟲叫Bingbot。


如果想自己實現一款小型的搜尋引擎,我們也可以編寫出自己的爬蟲去實現,當然,雖然可能在效能或者演算法上比不上主流的搜尋引擎,但是個性化的程度會非常高,並且也有利於我們更深層次地理解搜尋引擎內部的工作原理。


大資料時代也離不開爬蟲,比如在進行大資料分析或資料探勘時,我們可以去一些比較大型的官方站點下載資料來源。但這些資料來源比較有限,那麼如何才能獲取更多更高質量的資料來源呢?此時,我們可以編寫自己的爬蟲程式,從網際網路中進行資料資訊的獲取。所以在未來,爬蟲的地位會越來越重要。


2. 為什麼要學網路爬蟲


我們初步認識了網路爬蟲,但是為什麼要學習網路爬蟲呢?要知道,只有清晰地知道我們的學習目的,才能夠更好地學習這一項知識,我們將會為大家分析一下學習網路爬蟲的原因。


當然,不同的人學習爬蟲,可能目的有所不同,在此,我們總結了4種常見的學習爬蟲的原因。


1)學習爬蟲,可以私人訂製一個搜尋引擎,並且可以對搜尋引擎的資料採集工作原理進行更深層次地理解。


有的朋友希望能夠深層次地瞭解搜尋引擎的爬蟲工作原理,或者希望自己能夠開發出一款私人搜尋引擎,那麼此時,學習爬蟲是非常有必要的。


簡單來說,我們學會了爬蟲編寫之後,就可以利用爬蟲自動地採集網際網路中的資訊,採集回來後進行相應的儲存或處理,在需要檢索某些資訊的時候,只需在採集回來的資訊中進行檢索,即實現了私人的搜尋引擎。


當然,資訊怎麼爬取、怎麼儲存、怎麼進行分詞、怎麼進行相關性計算等,都是需要我們進行設計的,爬蟲技術主要解決資訊爬取的問題。


2)大資料時代,要進行資料分析,首先要有資料來源,而學習爬蟲,可以讓我們獲取更多的資料來源,並且這些資料來源可以按我們的目的進行採集,去掉很多無關資料。


在進行大資料分析或者進行資料探勘的時候,資料來源可以從某些提供資料統計的網站獲得,也可以從某些文獻或內部資料中獲得,但是這些獲得資料的方式,有時很難滿足我們對資料的需求,而手動從網際網路中去尋找這些資料,則耗費的精力過大。


此時就可以利用爬蟲技術,自動地從網際網路中獲取我們感興趣的資料內容,並將這些資料內容爬取回來,作為我們的資料來源,從而進行更深層次的資料分析,並獲得更多有價值的資訊。


3)對於很多SEO從業者來說,學習爬蟲,可以更深層次地理解搜尋引擎爬蟲的工作原理,從而可以更好地進行搜尋引擎優化


既然是搜尋引擎優化,那麼就必須要對搜尋引擎的工作原理非常清楚,同時也需要掌握搜尋引擎爬蟲的工作原理,這樣在進行搜尋引擎優化時,才能知己知彼,百戰不殆。


4)從就業的角度來說,爬蟲工程師目前來說屬於緊缺人才,並且薪資待遇普遍較高,所以,深層次地掌握這門技術,對於就業來說,是非常有利的。


有些朋友學習爬蟲可能為了就業或者跳槽。從這個角度來說,爬蟲工程師方向是不錯的選擇之一,因為目前爬蟲工程師的需求越來越大,而能夠勝任這方面崗位的人員較少,所以屬於一個比較緊缺的職業方向,並且隨著大資料時代的來臨,爬蟲技術的應用將越來越廣泛,在未來會擁有很好的發展空間。


除了以上為大家總結的4種常見的學習爬蟲的原因外,可能你還有一些其他學習爬蟲的原因,總之,不管是什麼原因,理清自己學習的目的,就可以更好地去研究一門知識技術,並堅持下來。


3. 網路爬蟲的組成


接下來,我們將介紹網路爬蟲的組成。網路爬蟲由控制節點、爬蟲節點、資源庫構成。


圖1-1所示是網路爬蟲的控制節點和爬蟲節點的結構關係。


640?wx_fmt=png

▲圖1-1 網路爬蟲的控制節點和爬蟲節點的結構關係


可以看到,網路爬蟲中可以有多個控制節點,每個控制節點下可以有多個爬蟲節點,控制節點之間可以互相通訊,同時,控制節點和其下的各爬蟲節點之間也可以進行互相通訊,屬於同一個控制節點下的各爬蟲節點間,亦可以互相通訊。


控制節點,也叫作爬蟲的中央控制器,主要負責根據URL地址分配執行緒,並呼叫爬蟲節點進行具體的爬行。


爬蟲節點會按照相關的演算法,對網頁進行具體的爬行,主要包括下載網頁以及對網頁的文字進行處理,爬行後,會將對應的爬行結果儲存到對應的資源庫中。


4. 網路爬蟲的型別


現在我們已經基本瞭解了網路爬蟲的組成,那麼網路爬蟲具體有哪些型別呢?


網路爬蟲按照實現的技術和結構可以分為通用網路爬蟲、聚焦網路爬蟲、增量式網路爬蟲、深層網路爬蟲等型別。在實際的網路爬蟲中,通常是這幾類爬蟲的組合體。


4.1 通用網路爬蟲


首先我們為大家介紹通用網路爬蟲(General Purpose Web Crawler)。通用網路爬蟲又叫作全網爬蟲,顧名思義,通用網路爬蟲爬取的目標資源在全網際網路中。


通用網路爬蟲所爬取的目標資料是巨大的,並且爬行的範圍也是非常大的,正是由於其爬取的資料是海量資料,故而對於這類爬蟲來說,其爬取的效能要求是非常高的。這種網路爬蟲主要應用於大型搜尋引擎中,有非常高的應用價值。


通用網路爬蟲主要由初始URL集合、URL佇列、頁面爬行模組、頁面分析模組、頁面資料庫、連結過濾模組等構成。通用網路爬蟲在爬行的時候會採取一定的爬行策略,主要有深度優先爬行策略和廣度優先爬行策略。


4.2 聚焦網路爬蟲


聚焦網路爬蟲(Focused Crawler)也叫主題網路爬蟲,顧名思義,聚焦網路爬蟲是按照預先定義好的主題有選擇地進行網頁爬取的一種爬蟲,聚焦網路爬蟲不像通用網路爬蟲一樣將目標資源定位在全網際網路中,而是將爬取的目標網頁定位在與主題相關的頁面中,此時,可以大大節省爬蟲爬取時所需的頻寬資源和伺服器資源。


聚焦網路爬蟲主要應用在對特定資訊的爬取中,主要為某一類特定的人群提供服務。


聚焦網路爬蟲主要由初始URL集合、URL佇列、頁面爬行模組、頁面分析模組、頁面資料庫、連結過濾模組、內容評價模組、連結評價模組等構成。內容評價模組可以評價內容的重要性,同理,連結評價模組也可以評價出連結的重要性,然後根據連結和內容的重要性,可以確定哪些頁面優先訪問。


聚焦網路爬蟲的爬行策略主要有4種,即基於內容評價的爬行策略、基於連結評價的爬行策略、基於增強學習的爬行策略和基於語境圖的爬行策略。關於聚焦網路爬蟲具體的爬行策略,我們將在下文中進行詳細分析。


4.3 增量式網路爬蟲


增量式網路爬蟲(Incremental Web Crawler),所謂增量式,對應著增量式更新。


增量式更新指的是在更新的時候只更新改變的地方,而未改變的地方則不更新,所以增量式網路爬蟲,在爬取網頁的時候,只爬取內容發生變化的網頁或者新產生的網頁,對於未發生內容變化的網頁,則不會爬取。


增量式網路爬蟲在一定程度上能夠保證所爬取的頁面,儘可能是新頁面。


4.4 深層網路爬蟲


深層網路爬蟲(Deep Web Crawler),可以爬取網際網路中的深層頁面,在此我們首先需要了解深層頁面的概念。


在網際網路中,網頁按存在方式分類,可以分為表層頁面和深層頁面。所謂的表層頁面,指的是不需要提交表單,使用靜態的連結就能夠到達的靜態頁面;而深層頁面則隱藏在表單後面,不能通過靜態連結直接獲取,是需要提交一定的關鍵詞之後才能夠獲取得到的頁面。


在網際網路中,深層頁面的數量往往比表層頁面的數量要多很多,故而,我們需要想辦法爬取深層頁面。


爬取深層頁面,需要想辦法自動填寫好對應表單,所以,深層網路爬蟲最重要的部分即為表單填寫部分。


深層網路爬蟲主要由URL列表、LVS列表(LVS指的是標籤/數值集合,即填充表單的資料來源)、爬行控制器、解析器、LVS控制器、表單分析器、表單處理器、響應分析器等部分構成。


深層網路爬蟲表單的填寫有兩種型別:


  • 第一種是基於領域知識的表單填寫,簡單來說就是建立一個填寫表單的關鍵詞庫,在需要填寫的時候,根據語義分析選擇對應的關鍵詞進行填寫;

  • 第二種是基於網頁結構分析的表單填寫,簡單來說,這種填寫方式一般是領域知識有限的情況下使用,這種方式會根據網頁結構進行分析,並自動地進行表單填寫。


以上,為大家介紹了網路爬蟲中常見的幾種型別,希望讀者能夠對網路爬蟲的分類有一個基本的瞭解。


5. 爬蟲擴充套件——聚焦爬蟲


由於聚焦爬蟲可以按對應的主題有目的地進行爬取,並且可以節省大量的伺服器資源和頻寬資源,具有很強的實用性,所以在此,我們將對聚焦爬蟲進行詳細講解。圖1-2所示為聚焦爬蟲執行的流程,熟悉該流程後,我們可以更清晰地知道聚焦爬蟲的工作原理和過程。


640?wx_fmt=png

▲圖1-2 聚焦爬蟲執行的流程


首先,聚焦爬蟲擁有一個控制中心,該控制中心負責對整個爬蟲系統進行管理和監控,主要包括控制使用者互動、初始化爬行器、確定主題、協調各模組之間的工作、控制爬行過程等方面。


然後,將初始的URL集合傳遞給URL佇列,頁面爬行模組會從URL佇列中讀取第一批URL列表,然後根據這些URL地址從網際網路中進行相應的頁面爬取。


爬取後,將爬取到的內容傳到頁面資料庫中儲存,同時,在爬行過程中,會爬取到一些新的URL,此時,需要根據我們所定的主題使用連結過濾模組過濾掉無關連結,再將剩下來的URL連結根據主題使用連結評價模組或內容評價模組進行優先順序的排序。完成後,將新的URL地址傳遞到URL佇列中,供頁面爬行模組使用。


另一方面,將頁面爬取並存放到頁面資料庫後,需要根據主題使用頁面分析模組對爬取到的頁面進行頁面分析處理,並根據處理結果建立索引資料庫,使用者檢索對應資訊時,可以從索引資料庫中進行相應的檢索,並得到對應的結果。


這就是聚焦爬蟲的主要工作流程,瞭解聚焦爬蟲的主要工作流程有助於我們編寫聚焦爬蟲,使編寫的思路更加清晰。



02 網路爬蟲技能總覽


在上文中,我們已經初步認識了網路爬蟲,那麼網路爬蟲具體能做些什麼呢?用網路爬蟲又能做哪些有趣的事呢?在本章中我們將為大傢俱體講解。


1. 網路爬蟲技能總覽圖


如圖2-1所示,我們總結了網路爬蟲的常用功能。


640?wx_fmt=png

▲圖2-1 網路爬蟲技能示意圖


在圖2-1中可以看到,網路爬蟲可以代替手工做很多事情,比如可以用於做搜尋引擎,也可以爬取網站上面的圖片,比如有些朋友將某些網站上的圖片全部爬取下來,集中進行瀏覽,同時,網路爬蟲也可以用於金融投資領域,比如可以自動爬取一些金融資訊,並進行投資分析等。


有時,我們比較喜歡的新聞網站可能有幾個,每次都要分別開啟這些新聞網站進行瀏覽,比較麻煩。此時可以利用網路爬蟲,將這多個新聞網站中的新聞資訊爬取下來,集中進行閱讀。


有時,我們在瀏覽網頁上的資訊的時候,會發現有很多廣告。此時同樣可以利用爬蟲將對應網頁上的資訊爬取過來,這樣就可以自動的過濾掉這些廣告,方便對資訊的閱讀與使用。


有時,我們需要進行營銷,那麼如何找到目標客戶以及目標客戶的聯絡方式是一個關鍵問題。我們可以手動地在網際網路中尋找,但是這樣的效率會很低。此時,我們利用爬蟲,可以設定對應的規則,自動地從網際網路中採集目標使用者的聯絡方式等資料,供我們進行營銷使用。


有時,我們想對某個網站的使用者資訊進行分析,比如分析該網站的使用者活躍度、發言數、熱門文章等資訊,如果我們不是網站管理員,手工統計將是一個非常龐大的工程。此時,可以利用爬蟲輕鬆將這些資料採集到,以便進行進一步分析,而這一切爬取的操作,都是自動進行的,我們只需要編寫好對應的爬蟲,並設計好對應的規則即可。


除此之外,爬蟲還可以實現很多強大的功能。總之,爬蟲的出現,可以在一定程度上代替手工訪問網頁,從而,原先我們需要人工去訪問網際網路資訊的操作,現在都可以用爬蟲自動化實現,這樣可以更高效率地利用好網際網路中的有效資訊。


2. 搜尋引擎核心


爬蟲與搜尋引擎的關係是密不可分的,既然提到了網路爬蟲,就免不了提到搜尋引擎,在此,我們將對搜尋引擎的核心技術進行一個簡單的講解。


圖2-2所示為搜尋引擎的核心工作流程。首先,搜尋引擎會利用爬蟲模組去爬取網際網路中的網頁,然後將爬取到的網頁儲存在原始資料庫中。爬蟲模組主要包括控制器和爬行器,控制器主要進行爬行的控制,爬行器則負責具體的爬行任務。


然後,會對原始資料庫中的資料進行索引,並儲存到索引資料庫中。


當使用者檢索資訊的時候,會通過使用者互動介面輸入對應的資訊,使用者互動介面相當於搜尋引擎的輸入框,輸入完成之後,由檢索器進行分詞等操作,檢索器會從索引資料庫中獲取資料進行相應的檢索處理。


使用者輸入對應資訊的同時,會將使用者的行為儲存到使用者日誌資料庫中,比如使用者的IP地址、使用者所輸入的關鍵詞等等。隨後,使用者日誌資料庫中的資料會交由日誌分析器進行處理。日誌分析器會根據大量的使用者資料去調整原始資料庫和索引資料庫,改變排名結果或進行其他操作。


640?wx_fmt=png

▲圖2-2 搜尋引擎的核心工作流程


以上就是搜尋引擎核心工作流程的簡要概述,可能大家對索引和檢索的概念還不太能區分,在此我為大家詳細講一下。


簡單來說,檢索是一種行為,而索引是一種屬性。比如一家超市,裡面有大量的商品,為了能夠快速地找到這些商品,我們會將這些商品進行分組,比如有日常用品類商品、飲料類商品、服裝類商品等組別,此時,這些商品的組名我們稱之為索引,索引由索引器控制。


如果,有一個使用者想要找到某一個商品,那麼需要在超市的大量商品中尋找,這個過程,我們稱之為檢索。如果有一個好的索引,則可以提高檢索的效率;若沒有索引,則檢索的效率會很低。


比如,一個超市裡面的商品如果沒有進行分類,那麼使用者要在海量的商品中尋找某一種商品,則會比較費力。


3. 使用者爬蟲的那些事兒


使用者爬蟲是網路爬蟲中的一種型別。所謂使用者爬蟲,指的是專門用來爬取網際網路中使用者資料的一種爬蟲。由於網際網路中的使用者資料資訊,相對來說是比較敏感的資料資訊,所以,使用者爬蟲的利用價值也相對較高。


利用使用者爬蟲可以做大量的事情,接下來我們一起來看一下利用使用者爬蟲所做的一些有趣的事情吧。


2015年,有知乎網友對知乎的使用者資料進行了爬取,然後進行對應的資料分析,便得到了知乎上大量的潛在資料,比如:


  • 知乎上註冊使用者的男女比例:男生佔例多於60%。

  • 知乎上註冊使用者的地區:北京的人口占據比重最大,多於30%。

  • 知乎上註冊使用者從事的行業:從事網際網路行業的使用者佔據比重最大,同樣多於30%。


除此之外,只要我們細心發掘,還可以挖掘出更多的潛在資料,而要分析這些資料,則必須要獲取到這些使用者資料,此時,我們可以使用網路爬蟲技術輕鬆爬取到這些有用的使用者資訊。


同樣,在2015年,有網友爬取了3000萬QQ空間的使用者資訊,並同樣從中獲得了大量潛在資料,比如:


  • QQ空間使用者發說說的時間規律:晚上22點左右,平均發說說的數量是一天中最多的時候。

  • QQ空間使用者的出生月份分佈:1月份和10月份出生的使用者較多。

  • QQ空間使用者的年齡階段分佈:出生於1990年到1995年的使用者相對來說較多。

  • QQ空間使用者的性別分佈:男生佔比多於50%,女生佔比多於30%,未填性別的佔10%左右。


除了以上兩個例子之外,使用者爬蟲還可以做很多事情,比如爬取淘寶的使用者資訊,可以分析淘寶使用者喜歡什麼商品,從而更有利於我們對商品的定位等。


由此可見,利用使用者爬蟲可以獲得很多有趣的潛在資訊,那麼這些爬蟲難嗎?其實不難,相信你也能寫出這樣的爬蟲。



03 小結


  • 網路爬蟲也叫作網路蜘蛛、網路螞蟻、網路機器人等,可以自動地瀏覽網路中的資訊,當然瀏覽資訊的時候需要按照我們制定的規則去瀏覽,這些規則我們將其稱為網路爬蟲演算法。使用Python可以很方便地編寫出爬蟲程式,進行網際網路資訊的自動化檢索。

  • 學習爬蟲,可以:①私人訂製一個搜尋引擎,並且可以對搜尋引擎的資料採集工作原理,進行更深層次地理解;②為大資料分析提供更多高質量的資料來源;③更好地研究搜尋引擎優化;④解決就業或跳槽的問題。

  • 網路爬蟲由控制節點、爬蟲節點、資源庫構成。

  • 網路爬蟲按照實現的技術和結構可以分為通用網路爬蟲、聚焦網路爬蟲、增量式網路爬蟲、深層網路爬蟲等型別。在實際的網路爬蟲中,通常是這幾類爬蟲的組合體。

  • 聚焦網路爬蟲主要由初始URL集合、URL佇列、頁面爬行模組、頁面分析模組、頁面資料庫、連結過濾模組、內容評價模組、連結評價模組等構成。

  • 爬蟲的出現,可以在一定程度上代替手工訪問網頁,所以,原先我們需要人工去訪問網際網路資訊的操作,現在都可以用爬蟲自動化實現,這樣可以更高效率地利用好網際網路中的有效資訊。

  • 檢索是一種行為,而索引是一種屬性。如果有一個好的索引,則可以提高檢索的效率,若沒有索引,則檢索的效率會很低。

  • 使用者爬蟲是網路爬蟲的其中一種型別。所謂使用者爬蟲,即專門用來爬取網際網路中使用者資料的一種爬蟲。由於網際網路中的使用者資料資訊,相對來說是比較敏感的資料資訊,所以,使用者爬蟲的利用價值也相對較高。


640?

相關文章