網路爬蟲實戰(二)

青年極客微信公眾號:youthgeek,和我一起在極客的世界里遨遊。

在上一篇文章(網路爬蟲實戰(一))中,我們粗略的了解了下所謂的網路爬蟲是什麼,在這一篇文章中主要結合公司的實際業務需求,對網路爬蟲進行進一步的分析和學習。在這一篇文章中,主要會講述:

  1. 公司的業務需求

  2. 通用網路爬蟲系統架構

  3. 爬蟲系統部署和高可用性

一、公司的業務需求

作者所在的公司在發展中逐漸發現公司論壇給用戶提供的內容沒有一定性的突破,因此想通過抓取外部資源的數據內容來填充內部資源的不足,並且降低公司小編的工作量,減少獲取內容所花費的成本。

在這樣的目的下,筆者接觸並且學習了爬蟲系統,並且根據需求開發了一套通用的爬蟲系統。下面介紹這套爬蟲系統的系統架構。

二、通用網路爬蟲系統架構

系統的總體架構圖如下:

  • 系統模塊分為:採集Server、採集Worker和Redis數據集群。採集Server負責採集任務的配置、採集任務的下發和採集結果的監控(如下圖,採集Server提供了一個可視化界面進行配置和監控)。採集Worker負責採集任務的消費和對採集結果數據的解析。而Redis數據集群則提供了中間緩存的作用,不僅臨時存儲了採集任務,並且永久存儲了已經被程序採集過的Url。


  • 系統爬取數據流程:系統可以啟用n個採集Server,每個爬蟲Server都可以向Redis集群中下發爬取URL的任務信息,而n個採集Worker可以啟用k個線程對Redis集群中的採集任務進行消費,採集Worker採集任務時,會自動解析頁面,識別出是否繼續進行採集,若繼續進行採集工作,則將新的任務再次加入到Redis任務隊列中;若獲取到最終需要的信息,則停止採集工作,對採集結果進行存儲。

  • 系統代理模塊:(因為篇幅有限,所以該模塊沒有在上圖中畫出)採集程序在爬取其他外部資源信息時,經常會被一些擁有反爬策略的網站給屏蔽,所以,作為一個健壯的爬蟲系統,應該需要具備代理的模塊,代理功能應該和系統進行解耦,當爬蟲系統需要時進行開啟。

  • 採集結果過濾模塊:該模塊也同樣沒有在上圖中進行展示,因為如果全部進行展示會顯得過於複雜,不夠簡潔明了。該模塊的功能主要是:通過設置一些過濾器,過濾那麼不符合條件的數據(包括含有垃圾信息、淫穢信息和重複數據等問題),該模塊中涉及較多的發垃圾和文本去重方面的知識,如果有感興起的朋友,可以關注我後續對於發垃圾和文本去重這方面文章的更新,這裡就不過多進行闡述。

三、爬蟲系統部署和高可用性

在設計系統時,常常需要考慮系統的高可用性,避免系統的單點故障就導致整個系統不可用的情況,所以在設計的初期也考慮到可用性的問題,因此將採集任務下發的Server和負責消費和解析數據的Worker進行分離解耦。這樣就可以在多台伺服器上進行部署多個採集Server和採集Worker,當某一台伺服器冗機,對於整個系統還是可用的。

然而部署多個採集程序是一種高可用性的手段,同樣還可以對每個採集節點進行實時的監控,使用監控腳本監控程序的心跳信息是最常用的手段和最直接的方式。下面貼出監控的腳本代碼(Python):

以上是對爬蟲系統的淺談,若有不對之處請指出。再者若您也是一名青年極客,關注我,和我一起成長,一起在極客的世界里遨遊。(如需要具體的代碼可以在下發評論留言或關注我的個人微信公眾號和我聯繫)

你可能會喜歡