白紅艷
(寧夏理工學(xué)院,寧夏 石嘴山 753000)
在互聯(lián)網(wǎng)技術(shù)不斷發(fā)展的背景下,大數(shù)據(jù)技術(shù)的應(yīng)用越來越普遍,網(wǎng)絡(luò)數(shù)據(jù)量不斷增加,如何從海量數(shù)據(jù)快速獲取有效信息,完成空間規(guī)劃工作是當(dāng)前鄉(xiāng)村空間規(guī)劃信息化以及現(xiàn)代化發(fā)展中面臨的巨大挑戰(zhàn)。網(wǎng)絡(luò)爬蟲技術(shù)的有效應(yīng)用能夠解決這些問題,還可以根據(jù)鄉(xiāng)村空間規(guī)劃的具體要求自行定制規(guī)則,選取特定的內(nèi)容,能夠精準(zhǔn)地獲取空間規(guī)劃過程中的有效信息。此外,網(wǎng)絡(luò)爬蟲技術(shù)也可以根據(jù)鄉(xiāng)村空間規(guī)劃的實(shí)際需求進(jìn)行自動(dòng)化運(yùn)行,進(jìn)一步保證數(shù)據(jù)采集系統(tǒng)的現(xiàn)代化水平。
一般情況下,在網(wǎng)頁中的信息包含超鏈接信息、文字信息,從功能上進(jìn)行分析,爬蟲處理主要完成數(shù)據(jù)采集、處理、存儲(chǔ)等不同環(huán)節(jié)。在開展網(wǎng)絡(luò)爬蟲系統(tǒng)框架設(shè)計(jì)工作時(shí),必須完成控制器、解析器、資源庫等設(shè)計(jì)。
1.控制器為多線程中不同爬蟲線程分配工作任務(wù)。
2.解析器完成網(wǎng)頁下載,并處理頁面進(jìn)。在爬蟲程序運(yùn)行過程中,解析器主要完成基本工作。
3.資源庫主要保存下載的網(wǎng)頁資源。目前,不同的網(wǎng)絡(luò)爬蟲管理技術(shù)具有相似性。提取有效信息數(shù)據(jù)后可以對相關(guān)信息進(jìn)行解析并保存數(shù)據(jù)[1]。
Python 作為解釋型面向?qū)ο蟮膭?dòng)態(tài)數(shù)據(jù)類型高級程序設(shè)計(jì)語言,在應(yīng)用過程中可以編譯成.pyc 跨平臺(tái)自解碼文件。該文件的主要優(yōu)勢是能夠簡單隱藏源碼,并且對提高載入速度有積極作用,還可以實(shí)現(xiàn)跨平臺(tái)應(yīng)用,可以將Python 與Java、C++語言進(jìn)行結(jié)合封裝成Python 可以調(diào)用的擴(kuò)展庫,程序員能夠集中精力對程序邏輯進(jìn)行設(shè)計(jì)和處理[2]。
在對鄉(xiāng)村空間規(guī)劃數(shù)據(jù)信息采集系統(tǒng)設(shè)計(jì)過程中,需要以統(tǒng)一的標(biāo)準(zhǔn)和規(guī)范為基礎(chǔ)整合鄉(xiāng)村各類基礎(chǔ)空間信息和農(nóng)村土地流轉(zhuǎn)信息。這樣才能夠形成縣-鎮(zhèn)-村不同級別共享的信息數(shù)據(jù)采集平臺(tái)。需要以空間規(guī)劃信息為主進(jìn)行研發(fā),保證平臺(tái)采集功能的簡單性和實(shí)用性。同時(shí)要根據(jù)不同地區(qū)鄉(xiāng)村空間規(guī)劃的實(shí)際需求靈活定制。在技術(shù)上要具有較強(qiáng)的可行性和超越性;在時(shí)間上可以分段實(shí)施,滿足當(dāng)前需求的同時(shí),適應(yīng)未來業(yè)務(wù)需求[3]。
目前,在鄉(xiāng)村空間規(guī)劃數(shù)據(jù)信息采集平臺(tái)建設(shè)過程中,需要從以下原則出發(fā),保證該系統(tǒng)平臺(tái)的建設(shè)效果:
1.堅(jiān)持高效性原則。該數(shù)據(jù)采集平臺(tái)的不同數(shù)據(jù)必須得到有效組織和歸類,保證信息查詢更新工作順利完成。同時(shí)要防止因?yàn)橄到y(tǒng)投入時(shí)間比較長對整體性能產(chǎn)生負(fù)面影響。
2.堅(jiān)持集成性原則。在數(shù)據(jù)信息采集平臺(tái)應(yīng)用過程中,要確保不同業(yè)務(wù)流程能夠順利銜接,并利用數(shù)據(jù)庫關(guān)聯(lián)業(yè)務(wù)、數(shù)據(jù)交換等不同技術(shù)實(shí)現(xiàn)數(shù)據(jù)信息共享和傳播。
3.標(biāo)準(zhǔn)化原則。在數(shù)據(jù)采集系統(tǒng)建設(shè)過程中,需要根據(jù)鄉(xiāng)村空間規(guī)劃的具體要求和規(guī)范對建設(shè)用地信息、空間坐標(biāo)信息、行政區(qū)域編碼信息以及元數(shù)據(jù)標(biāo)準(zhǔn)等進(jìn)行全面掌握,保證數(shù)據(jù)采集的準(zhǔn)確性和規(guī)范性。
在基于Python 網(wǎng)絡(luò)爬蟲技術(shù)的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)過程中,需要完成分布式爬蟲架構(gòu),設(shè)計(jì)網(wǎng)絡(luò)爬蟲,主要是對網(wǎng)絡(luò)中特定信息進(jìn)行采取,從而為鄉(xiāng)村空間規(guī)劃提供可靠的數(shù)據(jù)信息。因此,在具體的設(shè)計(jì)中需要利用垂直搜索引擎獲取數(shù)據(jù)。為了保證網(wǎng)絡(luò)爬蟲任務(wù)能夠順利完成任務(wù),收集更多符合需求的信息。在應(yīng)用過程中可以從分布式架構(gòu)方式出發(fā)對鄉(xiāng)村空間規(guī)劃過程中的信息數(shù)據(jù)進(jìn)行爬取。分布式架構(gòu)包含分節(jié)點(diǎn)的工作狀態(tài)和監(jiān)控、URL 的分發(fā)工作等不同內(nèi)容。分節(jié)點(diǎn)能夠獲取主節(jié)點(diǎn)發(fā)放的工作任務(wù),并且能夠根據(jù)任務(wù)要求開展爬取工作,并將爬取結(jié)果及時(shí)反饋到主節(jié)點(diǎn)。爬蟲網(wǎng)絡(luò)的組成結(jié)構(gòu)如圖1 所示。
在分布式爬蟲架構(gòu)應(yīng)用過程中,計(jì)算機(jī)并行處理具有至關(guān)重要的作用。利用Nutch 框架可以完成分布式網(wǎng)絡(luò)爬蟲架構(gòu)。在鄉(xiāng)村空間規(guī)劃數(shù)據(jù)爬取過程中,主節(jié)點(diǎn)可以將所有帶URL 下載任務(wù)的內(nèi)容分配到不同的分節(jié)點(diǎn)完成工作。設(shè)計(jì)的分布式下載任務(wù)在調(diào)度過程中能夠及時(shí)將URL 映射到服務(wù)器進(jìn)行下載。計(jì)算公式如下:
Node=hashFun(MD5(URL))%n
在該公式應(yīng)用過程中:
Node 代表即將分配任務(wù)的節(jié)點(diǎn)。
hashFun()表示構(gòu)造的哈希函數(shù)。
n 表示節(jié)點(diǎn)的數(shù)量。
在分布式網(wǎng)絡(luò)應(yīng)用過程中,其具有較強(qiáng)的伸縮性,一旦節(jié)點(diǎn)數(shù)量出現(xiàn)變化,可以完成數(shù)據(jù)二次爬取。URL對集中式分割方法進(jìn)行應(yīng)用,可以構(gòu)建哈希函數(shù)完成工作任務(wù)。在具體的使用中需要先構(gòu)造哈希函數(shù),第一次計(jì)算獲取新的URL,并將其映射到工作任務(wù)表中之后,對工作任務(wù)表進(jìn)行哈希映射,將映射獲取的結(jié)果劃分到分節(jié)點(diǎn)[4]。
在對鄉(xiāng)村空間規(guī)劃數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)時(shí),其主要目標(biāo)是利用編寫爬蟲程序?qū)︵l(xiāng)村空間規(guī)劃的主題數(shù)據(jù)進(jìn)行爬取。需要對爬蟲程序的可行性、合規(guī)性、效率以及健壯性等問題進(jìn)行充分考慮。
1.可行性問題。在海量的互聯(lián)網(wǎng)信息中獲取有效的鄉(xiāng)村空間規(guī)劃數(shù)據(jù)信息難度比較高。普通用戶無法利用通用性爬蟲獲取相關(guān)信息。因此,需要對爬取目標(biāo)以及主題進(jìn)行科學(xué)規(guī)劃,定義爬蟲范圍,并制定網(wǎng)址過濾規(guī)則和內(nèi)容篩選規(guī)則,才能夠?qū)崿F(xiàn)鄉(xiāng)村空間規(guī)劃信息的精準(zhǔn)爬取。
2.合規(guī)性問題。Robots 協(xié)議是國際互聯(lián)網(wǎng)界的通用道德規(guī)范,在協(xié)議應(yīng)用過程中可以告知爬蟲程序的具體爬取范圍,明確哪些頁面能夠被抓取,在爬蟲程序運(yùn)行過程中可以自覺遵守Robots 協(xié)議。
3.效率問題。雖然在鄉(xiāng)村空間規(guī)劃中對基于Python的網(wǎng)絡(luò)爬蟲技術(shù)進(jìn)行應(yīng)用,可以明確空間規(guī)劃的主題信息,但是與主題相關(guān)的URL 數(shù)據(jù)量比較大,如果利用單線程結(jié)構(gòu)完成數(shù)據(jù)采集無法滿足數(shù)據(jù)應(yīng)用需求,在爬蟲程序編寫時(shí),需要利用多線程爬蟲技術(shù)。
4.健壯性問題。隨著反爬取技術(shù)的不斷發(fā)展,有一些網(wǎng)站在應(yīng)用過程中會(huì)設(shè)置反爬取策略,這就意味著在爬取過程中會(huì)出現(xiàn)不同問題。例如URL 無法順利連接、URL 顯示不存在、網(wǎng)絡(luò)不暢通等。為了保證爬蟲程序有效應(yīng)用,并對異常情況科學(xué)處理,需要保證爬蟲程序的健壯性,防止爬蟲程序陷入死循環(huán)。
在采集系統(tǒng)模型設(shè)計(jì)過程中,主要從以下模塊出發(fā),保證系統(tǒng)設(shè)計(jì)的全面性。
1.總調(diào)度模塊。這是鄉(xiāng)村空間規(guī)劃數(shù)據(jù)采集系統(tǒng)的大腦,對各個(gè)模塊進(jìn)行總調(diào)度。爬取后返回?cái)?shù)據(jù)信息,觸發(fā)下一個(gè)任務(wù),一直到完成所有爬蟲任務(wù)。
2.URL 管理器模塊。該模塊的主要功能是對所有URL 進(jìn)行科學(xué)管理,主要包含待爬取URL、新URL、URL 的有效判別以及已經(jīng)爬取的URL 編碼轉(zhuǎn)換等各項(xiàng)工作。
3.頁面下載器模塊。該模塊在應(yīng)用過程中需要從URL 管理器獲取URL 之后調(diào)用頁面管理器的下載功能,獲取相關(guān)數(shù)據(jù)。獲取的數(shù)據(jù)類型主要包含XML 數(shù)據(jù)以及HTML 數(shù)據(jù)和JSON 數(shù)據(jù)。
4.頁面解析器模塊。解析器主要是對下載器獲取的數(shù)據(jù)進(jìn)行解析處理,去除噪聲,獲取目標(biāo)數(shù)據(jù)。
5.數(shù)據(jù)存儲(chǔ)模塊。完成數(shù)據(jù)解析處理后,獲取目標(biāo)數(shù)據(jù),需要調(diào)用數(shù)據(jù)存儲(chǔ)模塊,將結(jié)構(gòu)化數(shù)據(jù)直接存儲(chǔ)在數(shù)據(jù)庫內(nèi),非結(jié)構(gòu)化數(shù)據(jù)需要存儲(chǔ)在本地硬盤,并與數(shù)據(jù)庫建立索引關(guān)系。
6.線程管理模塊。在基于Python 的網(wǎng)絡(luò)爬蟲技術(shù)應(yīng)用過程中,為了保障鄉(xiāng)村空間規(guī)劃信息獲取的精準(zhǔn)性,可以設(shè)定爬取作業(yè)的線程數(shù)量,利用多線程爬蟲提高數(shù)據(jù)爬取效率。
7.robots 管理器模塊。該模塊主要完成爬取網(wǎng)站的robots 協(xié)議下載或者更新,并根據(jù)具體的協(xié)議內(nèi)容對URL 管理器進(jìn)行調(diào)用,確定爬取地址的目錄結(jié)構(gòu)。
8.異常處理模塊。該模塊在應(yīng)用過程中需要將數(shù)據(jù)爬取中的所有模塊接入異常處理模塊。一旦出現(xiàn)異常情況,需要及時(shí)觸發(fā)異常處理進(jìn)程,并將其寫入日志信息庫。
完成信息采集系統(tǒng)各模塊設(shè)計(jì)工作后,需要在總調(diào)度程序的統(tǒng)一調(diào)度下開展數(shù)據(jù)采集工作。具體運(yùn)行步驟如下:
1.先確定鄉(xiāng)村空間規(guī)劃的爬取目標(biāo)并完成數(shù)據(jù)庫創(chuàng)建,之后對總調(diào)度模塊的不同參數(shù)進(jìn)行初始化配置,輸入待爬取網(wǎng)站的入口,明確解析器的參數(shù)配置、并發(fā)線程數(shù)量,之后將其導(dǎo)入網(wǎng)站robots 啟動(dòng)數(shù)據(jù)采集工作流程。
2.總調(diào)度模塊會(huì)先從URL 管理器中提取URL 并調(diào)用robots 管理器,對URL 的目錄是否合規(guī)進(jìn)行檢查。如果合規(guī)可以直接調(diào)用頁面下載完成數(shù)據(jù)下載;如果不合規(guī)需要調(diào)用URL 管理器請求新的待爬取URL[5]。
3.頁面下載器完成數(shù)據(jù)下載后,需要調(diào)用頁面解析器對數(shù)據(jù)進(jìn)行處理。如果存在問題會(huì)觸發(fā)異常處理模塊。
4.完成數(shù)據(jù)解析處理后,將結(jié)果進(jìn)行科學(xué)分類,主要包含主題數(shù)據(jù)和URL 數(shù)據(jù)。如果為URL 數(shù)據(jù),需要利用URL 管理器方法將其寫入待爬取URL 庫;如果為目標(biāo)數(shù)據(jù)也就是主題數(shù)據(jù),需要調(diào)用數(shù)據(jù)存儲(chǔ)模塊;如果不為以上兩種數(shù)據(jù)會(huì)觸發(fā)異常處理模塊。
5.在數(shù)據(jù)存儲(chǔ)模塊中會(huì)寫入數(shù)據(jù),之后開始下一輪爬取工作,如果不能順利進(jìn)行下一步爬取會(huì)觸發(fā)異常處理模塊。
在本次研究過程中主要利用基于Python 的網(wǎng)絡(luò)爬蟲技術(shù)完成鄉(xiāng)村空間規(guī)劃過程中的數(shù)據(jù)資源的采集工作,主要對數(shù)據(jù)資源層進(jìn)行深入分析。在數(shù)據(jù)資源層應(yīng)用過程中,其作為整個(gè)平臺(tái)架構(gòu)的重要基礎(chǔ),包含數(shù)據(jù)庫、社會(huì)經(jīng)濟(jì)數(shù)據(jù)、附件文檔等不同信息內(nèi)容。這些數(shù)據(jù)都會(huì)按照統(tǒng)一的技術(shù)規(guī)范進(jìn)行整合處理,并利用分布式存儲(chǔ)和管理模式提高數(shù)據(jù)的應(yīng)用價(jià)值。在數(shù)據(jù)采集系統(tǒng)運(yùn)行過程中,基礎(chǔ)數(shù)據(jù)層需要利用標(biāo)準(zhǔn)數(shù)據(jù)交換格式與服務(wù)層完成數(shù)據(jù)交換,在基于Python的網(wǎng)絡(luò)爬蟲數(shù)據(jù)采集系統(tǒng)應(yīng)用中,需要對空間基礎(chǔ)數(shù)據(jù)庫進(jìn)行科學(xué)設(shè)計(jì),并且要明確在鄉(xiāng)村空間規(guī)劃過程中,不同類別基礎(chǔ)數(shù)據(jù)的坐標(biāo)數(shù)據(jù)、平臺(tái)符號庫、規(guī)范標(biāo)準(zhǔn)等差異,完成異構(gòu)數(shù)據(jù)統(tǒng)一,為數(shù)據(jù)采集奠定有利基礎(chǔ)。在異構(gòu)數(shù)據(jù)融合統(tǒng)一時(shí),需要按照統(tǒng)一的技術(shù)標(biāo)準(zhǔn)進(jìn)行操作。在平臺(tái)設(shè)計(jì)中可以對鄉(xiāng)村空間規(guī)劃現(xiàn)有數(shù)據(jù)進(jìn)行科學(xué)整理,形成規(guī)范范圍、比例尺、坐標(biāo)體系、規(guī)劃用地分類體系等空間基礎(chǔ)數(shù)據(jù)庫。在空間基礎(chǔ)數(shù)據(jù)庫應(yīng)用過程中,可以利用網(wǎng)絡(luò)爬蟲技術(shù)對基礎(chǔ)地理數(shù)據(jù)庫、現(xiàn)狀數(shù)據(jù)庫、空間規(guī)劃數(shù)據(jù)庫以及社會(huì)經(jīng)濟(jì)數(shù)據(jù)庫等進(jìn)行精準(zhǔn)的數(shù)據(jù)采集和提取。還要通過云技術(shù)以及虛擬技術(shù)建立元數(shù)據(jù)庫,對空間基礎(chǔ)數(shù)據(jù)庫利用統(tǒng)一的編碼進(jìn)行數(shù)據(jù)入庫處理。
綜上所述,在鄉(xiāng)村振興戰(zhàn)略的影響下,我國鄉(xiāng)村的發(fā)展水平在不斷提升。鄉(xiāng)村振興戰(zhàn)略本身是利國利民的重大工程,也是系統(tǒng)、長期的復(fù)雜任務(wù)。在大數(shù)據(jù)時(shí)代,為了保證鄉(xiāng)村振興戰(zhàn)略順利實(shí)施,需要加強(qiáng)鄉(xiāng)村空間規(guī)劃工作。為了準(zhǔn)確提取在鄉(xiāng)村空間規(guī)劃中的各類主題信息數(shù)據(jù),需要對基于Python 的網(wǎng)絡(luò)爬蟲技術(shù)進(jìn)行應(yīng)用,才能獲取更加符合條件的網(wǎng)頁信息。在分布式網(wǎng)絡(luò)爬蟲技術(shù)應(yīng)用中,可以大大提高數(shù)據(jù)采集效率。在鄉(xiāng)村空間規(guī)劃信息采集過程中,可以根據(jù)具體的空間規(guī)劃目標(biāo)制定主體信息,利用網(wǎng)絡(luò)爬蟲技術(shù)精準(zhǔn)采集數(shù)據(jù)信息,提高數(shù)據(jù)采集效率,保證數(shù)據(jù)的應(yīng)用價(jià)值。