入門乾貨:一文看懂什麼是網絡爬蟲,都有哪些運行流程?

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

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

當然,要學習網絡爬蟲開發,首先需要認識網絡爬蟲,本文將帶領大家一起認識幾種典型的網絡爬蟲,並瞭解網絡爬蟲的各項常見功能。

入門乾貨:一文看懂什麼是網絡爬蟲,都有哪些運行流程?

01 什麼是網絡爬蟲

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

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

1. 初識網絡爬蟲

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

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

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

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

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

如果想自己實現一款小型的搜索引擎,我們也可以編寫出自己的爬蟲去實現,當然,雖然可能在性能或者算法上比不上主流的搜索引擎,但是

個性化的程度會非常高,並且也有利於我們更深層次地理解搜索引擎內部的工作原理。

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

入門乾貨:一文看懂什麼是網絡爬蟲,都有哪些運行流程?

2. 為什麼要學網絡爬蟲

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

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

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

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

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

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

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

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

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

入門乾貨:一文看懂什麼是網絡爬蟲,都有哪些運行流程?

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

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

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

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

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

3. 網絡爬蟲的組成

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

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

入門乾貨:一文看懂什麼是網絡爬蟲,都有哪些運行流程?

▲圖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所示為聚焦爬蟲運行的流程,熟悉該流程後,我們可以更清晰地知道聚焦爬蟲的工作原理和過程。

入門乾貨:一文看懂什麼是網絡爬蟲,都有哪些運行流程?

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

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

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

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

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

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

02 網絡爬蟲技能總覽

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

1. 網絡爬蟲技能總覽圖

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

入門乾貨:一文看懂什麼是網絡爬蟲,都有哪些運行流程?

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

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

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

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

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

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

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

入門乾貨:一文看懂什麼是網絡爬蟲,都有哪些運行流程?

2. 搜索引擎核心

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

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

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

當用戶檢索信息的時候,會通過用戶交互接口輸入對應的信息,用戶交互接口相當於搜索引擎的輸入框,輸入完成之後,由檢索器進行分詞等操作,檢索器會從索引數據庫中獲取數據進行相應的檢索處理。

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

入門乾貨:一文看懂什麼是網絡爬蟲,都有哪些運行流程?

▲圖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隊列、頁面爬行模塊、頁面分析模塊、頁面數據庫、鏈接過濾模塊、內容評價模塊、鏈接評價模塊等構成。
  • 爬蟲的出現,可以在一定程度上代替手工訪問網頁,所以,原先我們需要人工去訪問互聯網信息的操作,現在都可以用爬蟲自動化實現,這樣可以更高效率地利用好互聯網中的有效信息。
  • 檢索是一種行為,而索引是一種屬性。如果有一個好的索引,則可以提高檢索的效率,若沒有索引,則檢索的效率會很低。
  • 用戶爬蟲是網絡爬蟲的其中一種類型。所謂用戶爬蟲,即專門用來爬取互聯網中用戶數據的一種爬蟲。由於互聯網中的用戶數據信息,相對來說是比較敏感的數據信息,所以,用戶爬蟲的利用價值也相對較高。
關於作者:韋瑋,資深網絡爬蟲技術專家、大數據專家和軟件開發工程師,從事大型軟件開發與技術服務多年,精通Python技術,在Python網絡爬蟲、Python機器學習、Python數據分析與挖掘、Python Web開發等多個領域都有豐富的實戰經驗。

本文摘編自《精通Python網絡爬蟲:核心技術、框架與項目實戰》,經出版方授權發佈。

入門乾貨:一文看懂什麼是網絡爬蟲,都有哪些運行流程?

延伸閱讀《精通Python網絡爬蟲》

推薦語:資深專家以實戰為導向,講透Python網絡爬蟲各項核心技術和主流框架,深度講解網絡爬蟲的抓取技術與反爬攻關技巧。


分享到:


相關文章: