偽分布式網絡爬蟲框架的設計與自定義實現(一)


【項目願景】系統基於智能爬蟲方向對數據由原來的被動整理到未來的主動進攻的轉變的背景下,將賦予”爬蟲”自我認知能力,去主動尋找”進攻”目標。取代人工復雜而又單調的重復性工作。能夠實現在人工智能領域的某一方向上獨當一面的作用。

【項目進展】項目一期基本實現框架搭建,對數據的處理和簡單爬取任務實現。

【項目說明】為了能夠更好理解優秀框架的實現原理,本項目盡量屏蔽優秀開源第三方jar包實現,自定義實現后再去擇優而食,形成對比。

【設計原則】依據形式跟進新技術,不斷積累在不同業務場景下對各個開源技術的駕馭能力

【項目規划】

第一期  實現整個項目框架的搭建以及基礎知識的積蓄!

第二期  完全實現爬蟲在網絡領域的各種需求運作

第三期  利用框架在特定領域內獲取指定數據量后,通過”爬蟲”自動批量處理海量數據,從中搜集(挖掘)有用數據或者通過各種識別技術(模式識別、圖片識別、語音識別等)實現數據自動收集並高效化整理!跳轉到第四、五期

第四期  平台框架升級,利用現有成熟數據處理以及數據可視化技術對平台相應功能點進行生產化(所謂生產話改造是指能夠利用成熟框架快速適應生產化需求)改造。[成熟技術有Hadoop\Spark\Redis等優秀的各個方面的框架或技術、R語言],(注意:並且盡量使用開源框架,目的是研究優秀框架的實現源代碼)

第五期  平台語言升級,因為數據處理方向python有着優秀的性能,故需要將開發好的平台部分功能用合適的語言實現[注意:平台在真正的運行過程當中必定存在多方面的性能問題,要不斷的反思解決問題的方案,結合不同語言的優勢和所做的業務邏輯的差別,采用不同的處理方式]

第六期  移動端開發,自選方向......

第七期  采用機器學習等技術深度解析數據中的自動化問題,是的數據史前時代的被動整理,成為未來數據的自動清洗,將成熟的識別技術應用到平台開發當中。

【項目設計忠告】

本着實現任何功能從jdk甚至更為基礎的代碼訓練出發,使自己更加了解底層的實現細節,從而在盡可能短的時間里將jdk的80%能夠實現自由使用,java只是與計算機溝通的一種工具或是手段!在編程過程當中自我實現某些功能必定不是最優的,你就要學會從中尋找利於更為合適的和計算機溝通的方式,不同語言又不同的優勢,要在不斷地實踐中摸索,發揮出不同語言的優勢出來!

如果說 Java 是自動檔轎車,C 就是手動檔吉普。數據結構呢?是變速箱的工作原理。你完全可以不知道變速箱怎樣工作,就把自動檔的車子從 A 開到 B,而且未必就比懂得的人慢。寫程序這件事,和開車一樣,經驗可以起到很大作用,但如果你不知道底層是怎么工作的,就永遠只能開車,既不會修車,也不能造車。如果你對這兩件事都不感興趣也就罷了,數據結構懂得用就好。但若你此生在編程領域還有點更高的追求,數據結構是繞不開的課題。

Java 替你做了太多事情,那么多動不動還支持范型的容器類,加上垃圾收集,會讓你覺得編程很容易。但你有沒有想過,那些容器類是怎么來的,以及它存在的意義是什么?最粗淺的,比如 ArrayList 這個類,你想過它的存在是多么大的福利嗎——一個可以隨機訪問、自動增加容量的數組,這種東西 C 是沒有的,要自己實現。但是,具體怎么實現呢?如果你對這種問題感興趣,那數據結構是一定要看的。甚至,面向對象編程范式本身,就是個數據結構問題:怎么才能把數據和操作數據的方法封裝到一起,來造出 class / prototype 這種東西?
     此外,很重要的一點是,數據結構也是通向各種實用算法的基石,所以學習數據結構都是提升內力的事情。在全程設計的過程當中要不斷堅持從錯誤中學習,有位名人曾說,我從別人的錯誤里去學習,而不是一直去學習別人是怎么成功的!這也就是說,我們要這愛bug,調試bug就是在自我超越中成長!

【架構及核心模塊實現】

  1. 爬蟲采用心跳機制——便於對任務狀態進行監控和減輕任務調度器負擔。
  2. 爬蟲獲取資源后統一格式后傳輸給處理模塊,仿hadoop的MR實現——更加有效利用計算機資源。
  3. 依據任務數據特征不同動態選擇數據存儲技術——為框架可擴展性留出空間。
  4. 利用對Map的封裝實現PO容器(單例模式)——存放系統中具有唯一性的鍵值對參數,方便調用。
  5. 數據源和線程管理上采用連接池技術——以便資源的合理利用。

【分布式爬蟲架構原理圖】

 

【項目地址】https://github.com/chenkai1100/SpiderFrame/

歡迎各路大神批評指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM