• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于農(nóng)業(yè)的MVC設計模式的網(wǎng)絡蜘蛛的實現(xiàn)

      2016-11-19 08:41:24楊本輝
      農(nóng)家科技下旬刊 2016年4期

      楊本輝

      摘 要:利用PHP語言開發(fā)的基于農(nóng)業(yè)的MVC設計模式的網(wǎng)絡蜘蛛??梢詫崿F(xiàn)采集,能夠把各類的互聯(lián)網(wǎng)信息或者數(shù)據(jù)采集到自己的數(shù)據(jù)庫中,然后再進行一系列的處理。本文介紹的是整個網(wǎng)絡蜘蛛從無到有的過程。利用MVC的架構(gòu)思想開發(fā)出具有模塊化、易于多人開發(fā)、易于維護性、易于拓展和易于二次開發(fā)的特性的農(nóng)業(yè)網(wǎng)絡蜘蛛。

      關(guān)鍵詞:PHP;MVC;農(nóng)業(yè)網(wǎng)絡蜘蛛

      一、引言

      農(nóng)業(yè)(Agriculture)是利用動植物的生長發(fā)育規(guī)律,通過人工培育來獲得產(chǎn)品的產(chǎn)業(yè)。農(nóng)業(yè)屬于第一產(chǎn)業(yè),研究農(nóng)業(yè)的科學是農(nóng)學。農(nóng)業(yè)的勞動對象是有生命的動植物,獲得的產(chǎn)品是動植物本身。農(nóng)業(yè)提供支撐國民經(jīng)濟建設與發(fā)展的基礎產(chǎn)品。

      傳統(tǒng)農(nóng)業(yè)發(fā)展到今天,生產(chǎn)力與生產(chǎn)資料已經(jīng)不能匹配時代的發(fā)展。特別作為人類的精華,很多的農(nóng)業(yè)相關(guān)寶貴的知識,不能夠很好地傳承與發(fā)展。而知識的傳承性,關(guān)系到人類的興衰。如果知識不能很好的傳承,那么后世的人類就必須重新去研究、探索、總結(jié)。無疑,農(nóng)業(yè)相關(guān)前人知識的研究不止要傳承下去,而且還要很好的傳承下去。

      互聯(lián)網(wǎng)是一種現(xiàn)今先進生產(chǎn)力的技術(shù)集,它集合了IT、網(wǎng)絡、大數(shù)據(jù)、人工智能等各種技術(shù)。它是人類的先進生產(chǎn)力與生產(chǎn)資料。農(nóng)業(yè)與互聯(lián)網(wǎng)的結(jié)合將對傳統(tǒng)農(nóng)業(yè)帶來全新的血液。結(jié)合互聯(lián)網(wǎng)的高速處理、持久存儲以及快速獲取的能力,互聯(lián)網(wǎng)將把農(nóng)業(yè)知識進行極好的傳承,最終將會在講來把農(nóng)業(yè)推向一個新的高度。

      二、網(wǎng)絡蜘蛛的定義與原理

      網(wǎng)絡蜘蛛即Web Spider,是一個很形象的名字。如果把互聯(lián)網(wǎng)比喻成一個蜘蛛網(wǎng),那么Spider就是在網(wǎng)上爬來爬去的蜘蛛。那么網(wǎng)絡蜘蛛到底是做什么的呢?

      其實網(wǎng)絡蜘蛛就是一種獲取互聯(lián)網(wǎng)數(shù)據(jù)到特定數(shù)據(jù)庫系統(tǒng)中的一種程序工具,它的作用就是不斷的獲取互聯(lián)網(wǎng)的內(nèi)容,通過特有的過濾技術(shù),最終把內(nèi)容獲取到數(shù)據(jù)庫系統(tǒng)中,最終供用戶來檢索信息以及資源。

      從架構(gòu)層面上來說:網(wǎng)絡蜘蛛是有很多種設計模式的,每種模式都有不同的應用方向。常見的設計模式可以分為幾類。

      1. 深度優(yōu)先。深度優(yōu)先是指網(wǎng)絡蜘蛛會從 起始頁開始,一個鏈接一個鏈接跟蹤下去,處理完這條線路之后再轉(zhuǎn)入下一個起始頁,繼續(xù)跟蹤鏈接。這個方法有個優(yōu)點是網(wǎng)絡蜘蛛在設計的時候比較容易。

      2. 廣度優(yōu)先。廣度優(yōu)先是指網(wǎng)絡蜘蛛會先抓取起始網(wǎng)頁中鏈接的所有網(wǎng)頁,然后再選擇其中的一個鏈接網(wǎng)頁,繼續(xù)抓取在此網(wǎng)頁中鏈接的所有網(wǎng)頁。這是最常用的方式,因為這個方法可以讓網(wǎng)絡蜘蛛并行處理,提高其抓取速度。

      3.通用方式。網(wǎng)站內(nèi)容多種多樣,結(jié)構(gòu)也是各有不同,如何做到精準抓取呢。這就需要一個通用的結(jié)構(gòu)體系。通用方式的結(jié)構(gòu)體系可以分為以下三個步驟:

      (1) Url網(wǎng)址規(guī)則獲取

      (2) Listing列表頁面獲取

      (3) Content最終內(nèi)容頁面獲取

      4.幾種方式的對比。無論是深度優(yōu)先,還是廣度優(yōu)先,在獲取內(nèi)容上通常是獲取一個超鏈接地址后一個一個的爬行,在有些我們不得不對特定的網(wǎng)站進行內(nèi)容抓取的時候就沒有方法了。在這一種情況下,我們所需要的其實是精準的抓取而不是一個接一個的“爬取”。所以深度優(yōu)先和廣度優(yōu)先在這一類型的情況下是不適用的。通用方式就是解決這種情況的。通用方式會按照用戶需求有選擇的獲取內(nèi)容。

      三、農(nóng)業(yè)網(wǎng)絡蜘蛛程序國內(nèi)外現(xiàn)狀

      1.國外情況。國外的IT水平相對較高,我們可以在國外看到一些不錯的網(wǎng)絡蜘蛛。

      (1)Larbin。larbin是一種開源的網(wǎng)絡爬蟲/網(wǎng)絡蜘蛛,由法國的年輕人 Sébastien Ailleret獨立開發(fā)。larbin目的是能夠跟蹤頁面的url進行擴展的抓取,最后為搜索引擎提供廣泛的數(shù)據(jù)來源 。

      (2)Spiderman。Spiderman 是一個基于微內(nèi)核+插件式架構(gòu)的網(wǎng)絡蜘蛛,它的目標是通過簡單的方法就能將復雜的目標網(wǎng)頁信息抓取并解析為自己所需要的業(yè)務數(shù)據(jù)。

      (3)OpenWebSpider。OpenWebSpider是一個開源多線程Web Spider(robot:機器人,crawler:爬蟲)和包含許多有趣功能的搜索引擎。

      2.國內(nèi)情況。國內(nèi)的爬蟲程序一般數(shù)量不多,質(zhì)量也不好,大多數(shù)程序是對于國外開源程序的引用,以及二次開發(fā),所以不做多講。

      四、程序具體實現(xiàn)(程序設計簡介)

      1. 文件結(jié)構(gòu)。對于一個程序的實現(xiàn),文件結(jié)構(gòu)是十分重要的。良好的文件結(jié)構(gòu)常常意味著程序功能的合理。本程序的文件結(jié)構(gòu)圖如圖1所示:

      圖1 文件結(jié)構(gòu)圖

      Fig.1 The file structure diagram

      2. 網(wǎng)絡蜘蛛的設計與流程。此農(nóng)業(yè)網(wǎng)絡蜘蛛是一個通用的采集程序,采用的是通用方式,基于MVC開發(fā)思想,基于語言PHP,所需要的數(shù)據(jù)庫是開源的輕量級數(shù)據(jù)庫sqlite,運行的宿主操作系統(tǒng)是Linux。由于考慮到程序的通用性,所以每一個基礎的模塊是獨立封裝的,好比一個一個的零件。這樣的好處就是用戶可以根據(jù)自己的需求來組裝功能,這樣可以使得程序更加通用。程序的設計圖如圖2所示:

      程序總共分為4個模塊,分別會在下一段說明。

      (1)用戶模塊。用戶模塊主要負責管理整個程序的登錄用戶,比如用戶的增刪改查。還有密碼以及權(quán)限的配置。

      (2) 配置模塊。配置模塊主要負責把用戶的一些設置信息存儲起來以方便供后續(xù)程序使用。

      (3)采集模塊。采集模塊是整個網(wǎng)絡蜘蛛的核心模塊,整個蜘蛛的采集性能都是由這個模塊實現(xiàn)。其中這個模塊中有幾個核心問題的處理方式如下:

      ① 采集重復怎么辦。采集重復在網(wǎng)絡爬蟲中是普遍存在的。由于我們獲取源網(wǎng)站的數(shù)據(jù)的數(shù)據(jù)量都不小,而大多數(shù)時候我們在采集listing列表的url的時候的時候,由于源網(wǎng)站的數(shù)據(jù)庫可能會有一些插入操作別人在同時進行。所以這個時候取出的數(shù)據(jù)難免會和之前的數(shù)據(jù)想重復,這個其實是一個很正常的問題。

      解決采集重復的方法需要我們利用數(shù)據(jù)庫的一些特性,把一些字段設置為unique,最終用replace into(sqlite的sql語句)進行插入。

      ②采集出錯、中斷怎么辦。采集過程中出錯或者中斷是正常的,原因有很多,可是很多時候就只是僅僅由于網(wǎng)絡的不問題,或者我們采集的源服務器不穩(wěn)定。而無論什么原因,這樣肯定會造成數(shù)據(jù)的丟失。而這個時候怎么辦呢。

      解決方法實際上是在數(shù)據(jù)表里面添加一個字段專門來記錄數(shù)據(jù)寫入是否成功。成功就為1不成功就為0。

      (4)過濾模塊。由于各種原因,我們可能要對現(xiàn)有的一些采集數(shù)據(jù)進行一些過濾,或者一些替換。在這種情況下,可能就要使用到過濾模塊,過濾模塊常常用于一些非法內(nèi)容的替換,或者一些無用內(nèi)容的過濾。

      (5)發(fā)布模塊。等到數(shù)據(jù)從采集模塊獲取了以后,數(shù)據(jù)是存放在網(wǎng)絡蜘蛛的數(shù)據(jù)庫中。但是這樣的數(shù)據(jù)是無法直接導入到現(xiàn)有的一些主流的建站程序的。我們還必須要開發(fā)一個中間件來適應相應的cms,從而達到可以把數(shù)據(jù)導入其他開源程序的目的。

      (6)插件模塊。由于程序的功能很多時候不可能一下子考慮的十分全面,并且在程序開發(fā)中我們十分有必要使程序能夠拓展第三方的程序以使程序更加強大、健壯。所以特別多出一個插件模塊,主要負責整個程序新功能的拓展。而這個拓展一般由其他開發(fā)人員按照本程序提供的接口實現(xiàn)。

      (7)欄目模塊。由于采集的內(nèi)容種類繁多,所以必須要有一個模塊來使程序采集來的數(shù)據(jù)按照要求進行歸類,進行管理。

      (8) 內(nèi)容模塊。內(nèi)容模塊主要網(wǎng)絡蜘蛛負責采集來的內(nèi)容的增刪改查操作。這樣可以有效的管理采集來的資源。

      五、本程序的優(yōu)勢

      1.基于linux+nginx+PHP+sqlite。考慮到本程序的性能以及開發(fā)的便利性,本程序采用的編程語言是目前最為流行的網(wǎng)絡編程語言PHP。

      Sqlite是一個輕量級的數(shù)據(jù)庫,存儲效率高,數(shù)據(jù)以單文件的方式存儲,節(jié)省系統(tǒng)資源占用,是一個十分優(yōu)秀的開源輕量級數(shù)據(jù)庫。本程序的開發(fā)所存儲的數(shù)據(jù)都將使用sqlite數(shù)據(jù)庫存儲。

      2.基于MVC。MVC是一種思維規(guī)范,沒有明確的定義,只有一個需要遵循的思考方式,所以說,MVC是有不同的種類的,因為這取決于某一種MVC框架作者的思想。一般來說現(xiàn)在中國的互聯(lián)網(wǎng)流行的MVC實際上可以概括為:模型(Model),視圖(View)和控制Controller)。本程序的設計圍繞以下幾個方面作為思考:

      (1) 各施其職,互不干涉。

      (2) 有利于開發(fā)中的分工。

      (3) 有利于組件的重用。

      六、存在的客觀問題

      面向?qū)ο蟮脑O計思想注定程序是比較龐大的,效率相比面向過程偏低。

      對于一個程序來說,性能是很重要的。不過對于面向?qū)ο蟮某绦蛟O計都會有一個致命的弱點就是程序的性能不高。因為良好的拓展性以及模塊化的MVC開發(fā)思想多多少少都是會以損失一些程序性能為代價的。

      七、結(jié)語

      本網(wǎng)絡蜘蛛基于MVC的開發(fā)思想,使用PHP開發(fā)語言,能夠廣泛應用于各個行業(yè)的信息以及資源獲取,從而用作分析或者其它目的。本網(wǎng)路蜘蛛從編寫到成熟歷時3個月,中間大小修改大約50次。測試數(shù)據(jù)數(shù)目超過500萬次。

      參考文獻:

      [1] 開源中國. larbin. [EB/OL]. http://www.oschina.net/p/larbin. 2013-03-14.

      [2] 開源中國.spiderman. [EB/OL]. http://www.oschina.net/p/spiderman.2013-3-14.

      [3] 開源中國.openwebspider.[EB/OL].http://www.oschina.net/p/openwebspider. 2013-3-14.

      [4] 開源中國.snoopy. [EB/OL].http://www.oschina.net/p/snoopy.2013-03-14.

      [5] ChoJ,Garcia-MolinaH,PageL.Efficient crawling throughURL ordering. Proceedings of the7thACM-WWW InternationalConference . 1998.

      [6] 郭海燕.搜索引擎中網(wǎng)絡爬蟲技術(shù)研究[D]. 西安電子科技大學 2009.

      [7] 李學勇,譚義紅,田立軍,歐陽柳波,李國徽.ε-貪婪策略在網(wǎng)絡蜘蛛搜索策略中的應用[J].湖南工程學院學報(自然科學版). 2004,(02).

      [8] 李學勇,歐陽柳波,李國徽.基于模擬退火機制的網(wǎng)絡蜘蛛搜索策略[J].湖南理工學院學報(自然科學版).2004,(02).

      [9] 龍宇巍,王永成,許歡慶.定題搜索引擎Robot的設計與算法[J].計算機仿真.2004,(04).

      [10] 華偉臣,張秀瓊.網(wǎng)絡蜘蛛搜索研究[J].樂山師范學院學報. 2006,(05) .

      昌都县| 介休市| 大丰市| 岢岚县| 惠安县| 北安市| 九江县| 县级市| 郸城县| 嘉黎县| 迁西县| 浮山县| 阿拉善左旗| 宣城市| 沂源县| 上高县| 平昌县| 昭觉县| 福贡县| 台江县| 巫溪县| 东明县| 安图县| 汽车| 林芝县| 仁化县| 望奎县| 嘉义市| 金乡县| 和林格尔县| 道真| 娄底市| 二连浩特市| 北京市| 菏泽市| 岳池县| 海宁市| 和龙市| 雅江县| 镇江市| 文山县|