国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于農(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)絡蜘蛛。可以實現(xiàn)采集,能夠把各類的互聯(lián)網(wǎng)信息或者數(shù)據(jù)采集到自己的數(shù)據(jù)庫中,然后再進行一系列的處理。本文介紹的是整個網(wǎng)絡蜘蛛從無到有的過程。利用MVC的架構思想開發(fā)出具有模塊化、易于多人開發(fā)、易于維護性、易于拓展和易于二次開發(fā)的特性的農(nóng)業(yè)網(wǎng)絡蜘蛛。

關鍵詞: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è)相關寶貴的知識,不能夠很好地傳承與發(fā)展。而知識的傳承性,關系到人類的興衰。如果知識不能很好的傳承,那么后世的人類就必須重新去研究、探索、總結。無疑,農(nóng)業(yè)相關前人知識的研究不止要傳承下去,而且還要很好的傳承下去。

互聯(lián)網(wǎng)是一種現(xiàn)今先進生產(chǎn)力的技術集,它集合了IT、網(wǎng)絡、大數(shù)據(jù)、人工智能等各種技術。它是人類的先進生產(chǎn)力與生產(chǎn)資料。農(nóng)業(yè)與互聯(lián)網(wǎng)的結合將對傳統(tǒng)農(nóng)業(yè)帶來全新的血液。結合互聯(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)的內容,通過特有的過濾技術,最終把內容獲取到數(shù)據(jù)庫系統(tǒng)中,最終供用戶來檢索信息以及資源。

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

1. 深度優(yōu)先。深度優(yōu)先是指網(wǎng)絡蜘蛛會從 起始頁開始,一個鏈接一個鏈接跟蹤下去,處理完這條線路之后再轉入下一個起始頁,繼續(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)站內容多種多樣,結構也是各有不同,如何做到精準抓取呢。這就需要一個通用的結構體系。通用方式的結構體系可以分為以下三個步驟:

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

(2) Listing列表頁面獲取

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

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

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

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

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

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

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

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

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

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

圖1 文件結構圖

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)用戶模塊。用戶模塊主要負責管理整個程序的登錄用戶,比如用戶的增刪改查。還有密碼以及權限的配置。

(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ù)進行一些過濾,或者一些替換。在這種情況下,可能就要使用到過濾模塊,過濾模塊常常用于一些非法內容的替換,或者一些無用內容的過濾。

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

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

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

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

五、本程序的優(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) 有利于組件的重用。

六、存在的客觀問題

面向對象的設計思想注定程序是比較龐大的,效率相比面向過程偏低。

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

七、結語

本網(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)絡爬蟲技術研究[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) .

惠来县| 常熟市| 巨鹿县| 仪征市| 富蕴县| 南昌市| 沽源县| 留坝县| 宝应县| 夏河县| 定边县| 鄂托克前旗| 牡丹江市| 长白| 滁州市| 昭通市| 错那县| 石柱| 湟源县| 临泽县| 维西| 新乐市| 阿巴嘎旗| 长丰县| 乌拉特后旗| 石城县| 嵊泗县| 庆安县| 澄城县| 大悟县| 南涧| 应城市| 博客| 淳安县| 金沙县| 宜都市| 曲松县| 万源市| 个旧市| 江门市| 新丰县|