數據化時代,爬蟲工程師才是真正「扛把子」
- 2019 年 10 月 11 日
- 筆記
就像在飯店裡,你點了土豆並且能吃到,是因為有人幫你在土豆、蘿蔔、西紅柿等中找到土豆,也有人把土豆拿到你桌上。在網路上,這兩個動作都是由一位叫做爬蟲的同學幫你實現的。
也就是說,沒有爬蟲,就沒有今天的檢索,你就不能精確地查找資訊、有效地獲取數據。今天,就來說說爬蟲在數據分析領域的應用,以及它是如何幫助我們提升數據分析品質的。
一、數據化時代,爬蟲的本質是提升效率
網路爬蟲也叫網路機器人,可以代替人們自動化瀏覽網路中的資訊,進行數據的採集與整理。
它是一種程式,基本原理是向網站/網路發起請求,獲取資源後分析並提取有用數據。從技術層面來說,就是通過程式模擬瀏覽器請求站點的行為,把站點返回的HTML程式碼/JSON數據/二進位數據(圖片、影片) 爬到本地,進而提取自己需要的數據,並存放起來使用。

每一個程式都有自己的規則,網路爬蟲也不例外。它穿梭於全球各個網站中間,會根據人們施加的規則去採集資訊,我們稱這些規則為網路爬蟲演算法。規則是人定的,是人根據自己的目的與需求設計的,因此,根據使用者的目的,爬蟲可以有不同的功能。但所有爬蟲的本質,都是方便人們在海量的互聯網資訊中找到並下載到自己要的那一類,提升資訊獲取效率。
二、爬蟲的應用:搜索與幫助企業強化業務
1.搜索引擎:爬站點,為網路用戶提供便利
在網路發展伊始,全球範圍內能提供資訊的網站數量不多,用戶也不多。互聯網只是文件傳輸協議(FTP)站點的集合,用戶可以在這些站點中導航以找到特定的共享文件,而為了查找和組合互聯網上可用的分散式數據,人們創建了一個自動化程式,稱為網路爬蟲/機器人,可以抓取網上的所有網頁,然後將所有頁面上的內容複製到資料庫中製作索引。這也是最早期的搜索引擎。

如今隨著互聯網的高速發展,我們能夠在任何一個搜索引擎中看到來自全球各個網站的資訊。百度搜索引擎的爬蟲叫做百度蜘蛛(Baiduspider),360的爬蟲叫360Spider,搜狗的爬蟲叫Sogouspider,必應的爬蟲叫Bingbot。搜索引擎離不開爬蟲。
比如百度蜘蛛每天會在海量的互聯網資訊中進行爬取,爬取優質資訊並收錄。當用戶在百度搜索引擎上檢索對應關鍵詞時,百度將對關鍵詞進行分析處理,從收錄的網頁中找出相關網頁,按照一定的排名規則進行排序並將結果展現給用戶,工作原理如圖所示。現在,我們可以大膽地說,你每天都在免費享受爬蟲的福利。

2.企業:監控輿情,高效獲取有價值資訊
我們說過,爬蟲的本質是提升效率,爬蟲的規則是人定的;那麼企業就完全可以根據自己的業務需求去設計一個爬蟲,第一時間得到網路上與其相關資訊,並且進行清洗和整合。
大數據時代要進行數據分析,首先要有數據源,而網路爬蟲可以讓我們獲取更多數據源的同時,按照我們的目的進行採集,從而去掉很多無關數據。

比如在進行大數據分析或數據挖掘時,數據源可以從某些提供數據統計的網站獲取,也可以從某些文獻或內部資料中獲得。但是這些獲得數據的方式,有時很難滿足我們對數據的需求。此時,就可以利用爬蟲技術,自動地從互聯網中獲取更多我們感興趣的的數據內容,從而進行更深層次的數據分析,並獲得更多有價值的資訊。
除此以外,網路爬蟲還可以應用於金融分析中對金融數據進行採集,用以進行投資分析;應用於輿情監測與分析、目標客戶精準營銷等各個領域。
三、4種企業常用的網路爬蟲
網路爬蟲按照實現的技術和結構可以分為通用網路爬蟲、聚焦網路爬蟲、增量式網路爬蟲、深層網路爬蟲等類型。但實際的網路爬蟲由於複雜的網路環境,通常是這幾類爬蟲的組合體。
1.通用網路爬蟲
通用網路爬蟲又叫作全網爬蟲,顧名思義,爬取的目標資源在全互聯網中,所爬取的目標數據是巨大的,並且爬行的範圍也是非常大的。正是由於其爬取的數據是海量數據,所以對於這類爬蟲來說,其爬取的性能要求是非常高的。這種網路爬蟲主要應用於大型搜索引擎中,有非常高的應用價值。

通用網路爬蟲主要由初始URL集合、URL隊列、頁面爬行模組、頁面分析模組、頁面資料庫、鏈接過濾模組等構成。通用網路爬蟲在爬行的時候會採取一定的爬行策略,主要有深度優先爬行策略和廣度優先爬行策略,具體詳情在後文中會有介紹。
2.聚焦網路爬蟲
聚焦網路爬蟲也叫主題網路爬蟲,是按照預先定義好的主題有選擇地進行網頁爬取的一種爬蟲。聚焦網路爬蟲主要應用在對特定資訊的爬取中,主要為某一類特定的人群提供服務。
聚焦網路爬蟲同樣由初始URL集合、URL隊列、頁面爬行模組、頁面分析模組、頁面資料庫、鏈接過濾模組、內容評價模組、鏈接評價模組等構成。其中的內容評價模組和鏈接評價模組可以根據鏈接和內容的重要性,確定哪些頁面優先訪問。聚焦網路爬蟲的爬行策略主要有4種,如圖所示:

聚焦網路爬蟲由於可以按對應的主題有目的地進行爬取,所以在實際的運用過程中可以節省大量的伺服器資源和寬頻資源,因而具有很強的實用性。這裡我們以聚焦網路爬蟲為例來了解爬蟲運行的工作原理和流程。

如圖所示,聚焦網路爬蟲擁有一個控制中心,該控制中心負責對整個爬蟲系統進行管理和監控,主要包括控制用戶交互、初始化爬行器、確定主題、協調各模組之間的工作、控制爬行過程等方面:
(1)控制中心將初始的URL集合傳遞給URL隊列,頁面爬行模組會從URL隊列中讀取第一批URL列表;
(2)根據這些URL地址從互聯網中進行相應的頁面爬取;爬取後,將爬取到的內容傳到頁面資料庫中存儲;
(3)在爬行過程中,會爬取到一些新的URL,此時,需要根據所定的主題使用鏈接過濾模組過濾掉無關鏈接,再將剩下來的URL鏈接根據主題使用鏈接評價模組或內容評價模組進行優先順序的排序。完成後,將新的URL地址傳遞到URL隊列中,供頁面爬行模組使用;
(4)將頁面爬取並存放到頁面資料庫後,需要根據主題使用頁面分析模組對爬取到的頁面進行頁面分析處理,並根據處理結果建立索引資料庫,用戶檢索對應資訊時,可以從索引資料庫中進行相應的檢索,並得到對應的結果。
3.增量式網路爬蟲
這裡的「增量式」對應著增量式更新,增量式更新指的是在更新的時候只更新改變的地方,而未改變的地方則不更新。
增量式網路爬蟲,在爬取網頁的時候,只爬取內容發生變化的網頁或者新產生的網頁,對於未發生內容變化的網頁,則不會爬取。增量式網路爬蟲在一定程度上能夠保證所爬取的頁面,儘可能是新頁面。
4.深層網路爬蟲
在互聯網中,網頁按存在方式分類可分為表層頁面和深層頁面。表層頁面指的是不需要提交表單,使用靜態的鏈接就能夠到達的靜態頁面;而深層頁面是需要提交一定的關鍵詞之後才能夠獲取得到的頁面。而在互聯網中,深層頁面的數量往往比表層頁面的數量要多很多。

深層網路爬蟲可以爬取互聯網中的深層頁面,爬取深層頁面,需要想辦法自動填寫好對應表單。深層網路爬蟲主要由URL列表、LVS列表(LVS指的是標籤/數值集合,即填充表單的數據源)、爬行控制器、解析器、LVS控制器、表單分析器、表單處理器、響應分析器等部分構成。
四、網路爬蟲的爬取策略
在前面我們說過網路爬蟲演算法是根據人們施加的規則去採集資訊,而由於網路複雜的環境,所以相應的也有各種不同演算法,也就是爬取策略。這裡我們主要介紹下爬取的順序與頻率。
1.爬取順序
在網路爬蟲爬取的過程中,在帶爬取的URL列表中可能有很多URL地址,那麼爬蟲爬取這些URL地址就會有先後順序。
相對於通用網路爬蟲,爬取的順序並不是那麼重要。但聚焦網路爬蟲,爬取的順序與伺服器資源和寬頻資源有關,所以非常重要,一般由爬行策略決定。爬行策略主要有深度優先爬行策略、廣度優先爬行策略、大站優先策略、反鏈策略、其他爬行策略等。

如圖所示,假設有一個網站,ABCDEFG分別為站點下的網頁,如圖所示表示網頁的層次結構。假如此時網頁ABCDEFG都在爬行隊列中,那麼按照不同的爬行策略,其爬取的順序是不同的。
深度優先爬行策略:A→D→E→B→C→F→G
廣度優先爬行策略:A→B→C→D→E→F→G
除了以上兩種爬行策略之外,還可以採用大站爬行策略。可以按對應網頁所屬的站點進行歸類,如果某個網站的網頁數量多,則將其稱為大站,按照這種策略,網頁數量越多的網站越大,然後,優先爬取大站中的網頁URL地址。
另外還有反鏈策略,一個網頁的反向鏈接數,指的是該網頁被其他網頁指向的次數,這個次數在一定程度上代表著該網頁被其他網頁的推薦次數。所以,如果按反鏈策略去爬行的話,那麼哪個網頁的反鏈數量越多,則哪個網頁將被優先爬取。
但是在實際情況中,如果單純按反鏈策略去決定一個網頁的優先程度的話,那麼可能會出現大量的作弊情況。所以採用反向鏈接策略需要考慮可靠的反鏈數。除了以上這些爬行策略,在實際中還有很多其他的爬行策略,比如OPIC策略、Partial PageRank策略等。
2.爬取頻率
一個網站的網頁是經常更新的,作為爬蟲方,網站的更新頻率與爬蟲訪問網站的頻率越接近,則效果越好。當然,在爬蟲伺服器資源有限的情況下,爬蟲也需要根據對應策略,讓不同的網頁具有不同的更新優先順序,優先順序高的網頁更新,將獲得較快的爬取響應。常見的網頁更新策略主要有如下3種:

(1)用戶體驗策略:大部分用戶在使用搜索引擎查詢某個關鍵詞的時候,只會關注排名靠前的網頁,所以,在爬蟲伺服器資源有限的情況下,爬蟲會優先更新排名結果靠前的網頁。
(2)歷史數據策略:指的是可以依據某一個網頁的歷史更新數據,通過泊松過程進行建模等手段,預測該網頁下一次更新的時間,從而確定下一次對該網頁爬取的時間。
(3)聚類分析策略:網頁可能具有不同的內容,但是一般來說,具有類似屬性的網頁其更新頻率類似,所以可以對海量的網頁進行聚類分析,聚類完成後,可以依據同一個類型網頁平均更新值來設定爬取的頻率。
五、網路爬蟲的實現技術
對於實現技術,本文不做展開,僅為有興趣的同學提供幾個常見的語言:Python、Java、PHP、Node.JS、C++、Go語言(此外,網路爬蟲的開發語言還有很多)。
Python:爬蟲框架非常豐富,並且多執行緒的處理能力較強,並且簡單易學、程式碼簡潔,優點很多。
Java:適合開發大型爬蟲項目。
PHP:後端處理很強,程式碼很簡潔,模組也較豐富,但是並發能力相對來說較弱。
Node.JS:支援高並發與多執行緒處理。
C++:運行速度快,適合開發大型爬蟲項目,成本較高。
Go語言:同樣高並發能力非常強。
六、小結
說到爬蟲,很多人都認為它是網路世界中一個不可而為之的灰色地帶。恭喜你,讀完這篇文章,你對此的認知就超過了好多人。
因為爬蟲分為善意爬蟲和惡意爬蟲,例如,搜索引擎的爬蟲。善意爬蟲嚴格遵守Robots協議規範爬取網頁數據(如URL),它的存在能夠增加網站的曝光度,給網站帶來流量;

而惡意爬蟲,它無視Robots協議,對網站中某些深層次的、不願意公開的數據肆意爬取,其中不乏個人隱私或者商業秘密等重要資訊。並且惡意爬蟲的使用方希望從網站多次、大量的獲取資訊,所以其通常會向目標網站投放大量的爬蟲。如果大量的爬蟲在同一時間對網站進行訪問,很容易導致網站伺服器過載或崩潰,造成網站經營者的損失。
據統計,中國2017年互聯網流量有42.2%是由網路機器人創造的,其中惡意機器(主要為惡意爬蟲)流量佔到了21.80%。我們應該依法合理地使用網路爬蟲,這樣才能運用技術為企業帶來長久發展,用科學為社會創造更高價值。