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年,有知乎網友對知乎的用戶數據進行了爬取,然後進行對應的數據分析,便得到了知乎上大量的潛在數據,比如:
除此之外,隻要我們細心發掘,還可以挖掘出更多的潛在數據,而要分析這些數據,則必須要獲取到這些用戶數據,此時,我們可以使用網絡爬蟲技術輕松爬取到這些有用的用戶信息。
同樣,在2015年,有網友爬取了3000萬QQ空間的用戶信息,并同樣從中獲得了大量潛在數據,比如:
除了以上兩個例子之外,用戶爬蟲還可以做很多事情,比如爬取淘寶的用戶信息,可以分析淘寶用戶喜歡什麼商品,從而更有利于我們對商品的定位等。
由此可見,利用用戶爬蟲可以獲得很多有趣的潛在信息,那麼這些爬蟲難嗎?其實不難,相信你也能寫出這樣的爬蟲。
03 小結
本文摘編自《精通Python網絡爬蟲:核心技術、框架與項目實戰》。
延伸閱讀《精通Python網絡爬蟲》
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!