陳 黎,馬 健
1.重慶財經職業學院應用技術學院,重慶 402160
2.重慶大學,重慶 400044
隨著經濟和科技的不斷發展,當前農業研究熱點是農業網絡空間數據的開發和利用[1]。農業網絡空間數據來源于農業生產、農業流通和農業經濟等多個方面。農業網絡空間數據具有來源廣泛、結構復雜等特點,潛在應用價值較大。在當前農業發展和互聯網技術相結合的背景下,農業網絡空間信息在農業發展過程中起到較為重要的作用。但由于農業網絡空間數據格式復雜多樣,且在海量網絡數據中難以及時挖掘并動態監測農業網絡空間信息,不利于通過農業網絡空間信息分析農業空間數據。因此應采用行之有效的動態監測算法監測和分析農業網絡空間信息[2]。
經過實際分析發現,當前可通過構建檢測系統實時動態監測農業網絡空間信息,構建動態監測系統過程中較為重要的是從海量網絡信息中采集農業網絡空間信息[3]。采集信息方法的選取至關重要,網絡爬蟲是一種計算機應用程序,通過該種程序可實現網頁自動瀏覽和網頁數據抓取[4]。Scrapy是一種爬蟲應用框架程序,該程序是通過Python 編寫的,具有使用便捷和結構簡單的特點。當用戶需要某種網絡信息時,可采用Scrapy 下載所需信息,并及時將所需信息保存下來,儲存成用戶所需的存儲格式[5]。當前數據挖掘領域中廣泛應用的Scrapy,是數據挖掘領域重要的應用工具。
本文主要是在Scrapy 框架的基礎上,設計一種農業網絡空間信息動態監測信息系統,該系統中較為重要的是信息采集模塊和動態監測模塊。信息采集模塊中基于Scrapy 框架設計爬蟲[6],通過設計爬蟲爬取網絡中農業網絡空間數據信息,經過處理和分析后,通過動態監測系統實施監測農業網絡空間數據[7]。
為動態監測農業網絡空間信息,需采用合理的動態監測算法,本文構建的農業網絡空間信息動態監測系統中核心部分是總體設計,設計過程中需充分考慮當前和未來的技術發展狀況[8],同時應充分分析系統內部各個模塊間相互聯系程度。設計系統時應充分滿足可靠性、可拓展性和適用性等原則,基于上述原則構建的農業網絡空間信息動態監測系統結構如圖1 所示。

圖1 系統結構圖Fig.1 System structure diagram
從圖1 中可清晰明了的觀察到系統的層次,該系統主要由信息采集和處理模塊、農業網絡空間信息服務和分析等四個模塊構成[9]。每個層模塊之間相互聯系,各司其職。該農業網絡空間信息動態監測系統的主要用戶是政府部門、普通農戶和科研人員等。下面對四個模塊進行詳細分析。
1.1.1 信息采集模塊 系統信息輸入端是信息采集模塊,信息采集的主要對象是網絡中各種信息源和Scrapy 網絡爬蟲,信息源包括微博、論壇、貼吧等。信息采集模塊負責從互聯網中獲取農業網絡空間信息,將獲取的農業網絡空間信息存儲到數據庫中。
1.1.2 農業網絡空間信息處理模塊 該模塊主要功能是處理農業網絡空間信息,信息采集模塊采用Scrapy 網絡爬蟲獲取所需農業網絡空間的信息,然后將獲取的信息存儲到既定數據庫中。通過一定方法凈化信息所在網頁,提取數據庫中信息的特征,獲取所需信息,農業網絡空間信息分析模塊的輸入是處理結果[10]。
1.1.3 農業網絡空間信息分析模塊 該模塊的主要功能是分析農業網絡空間信息。主要是聚集相同的農業網絡空間信息,實現對農業網絡空間信息的分類。同時從中提取信息特征,分析相同農業網絡空間信息發展趨勢。系統核心業務層是農業網絡空間信息分析層,通過該模塊聚類和提取信息特征,實現對農業網絡空間信息的充分挖掘。通過挖掘信息構造話題列表,同時設置關鍵字信息,通過關鍵字從話題列表中搜索所需農業網絡空間信息[11],動態監測農業網絡空間信息。
1.1.4 農業網絡空間信息服務模塊 系統和用戶的交互界面是農業網絡空間信息服務模塊。該層主要功能是向用戶展示分析結果,分析結果包含農業網絡空間信息動態監測的各個方面,例如農業網絡空間信息發展趨勢、信息檢索和信息預警等方面。
經過上述分析發現,動態監測農業網絡空間信息時,較為重要的是采集農業網絡空間信息和動態監測農業網絡空間信息部分,應對上述兩部分進行詳細分析。
農業網絡空間信息從當前冗雜網絡數據中采集所需信息時,其過程較為繁雜且耗時較長。因此在信息采集模塊應先構建Scrapy 框架,依照構建的Scrapy 框架建立對網頁的請求響應,通過爬蟲設計實現對農業網絡空間信息的采集[7]。
1.2.1 Scrapy 框架 網絡爬蟲本質上是一種程序或者是腳本,該程序或者是腳本主要采用既定規則抓取互聯網信息,通過該種程度能有效解決網絡連接和爬取策略等問題。為提升開發者開發爬蟲的速度,需設計Scrapy 框架,框架圖如圖2 所示。

圖2 Scrapy 爬蟲框架Fig.2 Scrapy crawler framework
從框架圖中可以看出,該Scrapy 框架主要包括五個模塊。
(1)引擎 該模塊主要負責爬蟲、下載器、隊列和調度器之間數據傳遞和信息通訊。
(2)調度器 該模塊主要負責接收引擎傳輸的請求,依照一定規則將請求放入隊列當中。
(3)下載器 主要負責下載調度器發送的所有請求,將下載器獲取的相應傳輸到引擎中,由引擎傳輸到爬蟲中進行處理。
(4)爬蟲 主要負責處理所有的響應,從響應中提取獲取Project(項目)字段所需的數據,降需跟進的URL 傳輸到引擎中,再次進入到調度器中。
(5)隊列 負責處理爬蟲中獲取的Project,主要處理手段包括區中、持久化存儲等。
經過上述分析得到Scrapy 的工作步驟為:先啟動引擎,同時控制爬蟲運行,依照編寫的爬蟲策略控制引擎向調度器發送請求。調度器將請求加入隊列后,依照隊列順序向下載器中發送請求。下載器接收到請求后,下載所需農業網絡空間信息,將其保存到本地。此時下載信息等同于響應,將響應傳輸到爬蟲中經過爬蟲處理后形成Project,通過隊列保存或者輸出Project。
1.2.2 爬蟲設計
(1)定義爬取對象 當前計算機網絡中包含大量網絡信息,如果想要通過爬蟲從網絡中快速抓取所需信息,需采用爬蟲Project 定義所需爬取對象,本文采用MaizeItem 定義爬取對象。
(2)網頁爬取 網絡中網頁本質上是一種結構體,該結構體中包含網頁全部內容,因此可從結構體路徑中查詢農業網絡空間信息。右鍵選擇Chrome 瀏覽器中的檢查選項,瀏覽網頁結構體,從網絡結構體中獲取農業網絡空間信息。同時獲取農業網絡空間信息在結構體中的詳細內容和在結構體中路徑,其中詳細內容包括指向鏈接和文字信息等內容。依照結構體中路徑采用xpath()定位到農業網絡空間信息,在農業網絡空間信息爬蟲中,將程序寫成下列形式:a.attribute=response.xpath(‘//ul/li/a[include(@title,“農業網絡空間信息”)]’)。
該段代碼主要是為查詢包含農業網絡空間信息的條目,且該條目信息處于“ul/li/a”路徑中。從該條目中提取文章鏈接、文章標題和文章日期,將提取內容放入到MaiaeItem 中。同時將獲取的文章鏈接存儲為attributeUrl 形式,把存儲后文章鏈接放入調度器中。由于文章列表頁和文章內容頁具有不同的解析內容,因此應使用scrapy.Request(attributeUrl,Retracement=self.parseEffective Agricultural Network Spatial Information)。將指定的解析規則設置為parseEffective Agricultural Network Spatial Information(),在parseEffective Agricultural Network Spatial Information 中編寫解析規則。隨后抓取文章內容,抓取過程中采用xpath,在抓取文章內容后存儲文章,存儲位置為MaizeItem。通過上述過程獲取完整的Project 條目,該條目中應包含文章日期、標題、內容和鏈接,通過Pipeline 處理完整的Project 條目。使用xpath()定位文章列表頁和文章內容頁的下一頁鏈接[12]。假設存在下一頁鏈接,則需在調度器中采用上述過程繼續獲取下一頁鏈接,直至不存在下一頁鏈接為止。
(3)數據提取 為形成按照關鍵詞搜索的農業網絡空間信息,需處理爬取的MaiizeItem 對象,處理位置為Pipeline。形式如下所示“......某地區的玉米作物產量為xx,玉米作物產量結構和主要種植區域是xx 區,地區的大豆作物產量是yy,大豆作物產量結構和主要種植區域是yy 區....”。該農業網絡空間信息較為分散,用戶難以加以利用,需采集網絡中農業網絡空間數據,形成方便利用的農業網絡空間數據。
經過調查分析發現,農業網絡空間數據包含在MaiizeItem 數據中,其中部分農業網絡空間信息是不斷變動的,少部分變動幅度較小或基本保持穩定。但其中地區名稱是每日重復的,因此提取所需數據時,應提取地區名稱和農業網絡空間數據,構建地區名稱和農業網絡空間信息之間的關系。先通過地區名稱構建地區名稱列表,使用正則表達式查找和提取地區名稱列表中某地區的農業網絡空間信息。正則化表達式采用“/d”表示數字,匹配規則為“地區名稱+‘.* ?(/d+./d)’”,通過匹配規則可查找當地的農業網絡空間信息。由于農業網絡空間信息種類較多,應依照實際需求劃分成多種類型,通過不同的正則化規則獲取相應的農業網絡空間信息[13]。采用上述方法提取海量網絡數據中的農業網絡空間信息。
農業網絡空間信息動態監測的主要目的,是識別和提前預警農業網絡空間信息。整個動態監測過程中需建立詞庫,該詞庫中包含相關領域的農業網絡空間信息,依照獲取的農業網絡空間信息關鍵詞,匹配農業網絡空間信息,識別農業網絡空間信息,發出預警信息。針對農業網絡空間信息特點,本文采用WM 算法動態監測農業網絡空間數據信息。動態監測流程如圖3 所示。

圖3 農業網絡空間信息動態監測流程圖Fig.3 Flow chart of dynamic monitoring of spatial information of agricultural network
從圖3 中可以看出,WM 算法主要是處理同音字、拆分字和干擾符號,實現對所需農業網絡空間信息的精準匹配。同時應處理干擾符號,處理過程中采用表達式和通配符。WM 算法實現過程較為簡單,該算法計算的主要過程是處理構建表,構建表包括前綴表、移動表和哈希表。其中文本之中存在的是移動表,對于某一農業網絡空間信息出現時,移動表會移動相應長度。前綴表主要是和文本中第一個字符相匹配,處理匹配后文本,處理過程中需先計算查找的B字符,計算散列值Bh,判斷SHIFH[Bh],假設數值大于零,應繼續查找B字符,反之計算文本對應前綴散列值Bp,當HASH[Ch]和HASH[Ch+1]中存在p值時,假設PREFIX[p]=Bp,說明文本沒發生改變,依照關鍵字進行匹配[14]。
為研究本文算法動態監測農業網絡空間信息效果,需進行實際分析。本文主要從農業種植作物分布動態監測結果和農業植被分布情況兩個角度出發,分析本文算法動態監測效果。
為研究本文算法動態監測農業種植作物分布情況,主要從農業種植作物分布效果和部分地區農業種植作物產量,在2009 年到2018 年農業種植作物產量變化情況這兩個角度進行分析。首先分析2018 年全國農業種植作物分布效果,效果圖如圖4 所示。農業作物產量分布情況如表1 所示。

表1 農業種植作物產量分布情況/10,000 hm2Table 1 Distribution of crop yields under agricultural cultivation
從圖中可以看出,我國南部地區主要種植作物為水稻和小麥,部分地區兼作水稻和旱糧;我國西北地區種植作物較少,西北部地區中部分地區種植作物,重要種植作物為小麥和旱糧;我國東北地區主要種植作物為旱糧,少部分地區種植小麥。同時從表中可以看出,地區農業種植作物隨著年份的增加,種植作物產量也在不斷增加,且增加幅度較小。對比本文算法動態監測效果和實際地區農業作物產量變化情況發現,兩者之間相符程度較高,說明本文動態監測方法精準度較好。

圖4 2018 年農業種植作物分布效果圖Fig.4 Effect map of agricultural planting crop distribution in 2018

圖5 廣州市植被生態質量分布情況Fig.5 Distribution of vegetation ecological quality in Guangzhou
動態監測農業網絡空間信息的過程中,應監測農業網絡空間中植被分布狀況。植被是在農業生態系統中具有較為重要的作用,能夠保障自然環境同時改善植物和人類生存空間,因此動態監測農業網絡空間信息時應監測植被動態變化情況。通過本文動態監測算法分析2018 年廣州市植被生態質量分布情況,獲取分布結果如圖5 所示。同時詳細分析采用本文動態監測算法獲取2009 年-2018 年廣州植被生態質量相關指數動態變化情況。監測結果如表2 所示。
從圖5 中可以看出,2018 年廣州市大部分地區植被生態質量相關指數較好,即2018 年廣州市植被鞥太質量較好。從表2 中可以看出,廣州市植被相關指數隨著時間變化而不斷發生變化,2009年-2014 年隨著廣州市城市化進程不斷加劇,廣州市斑塊密度和形狀指數在不斷增加,說明此時廣州市植被遭受到大范圍破壞,導致單位面積斑塊數量大幅度增加,城市植被覆蓋率較差。隨著時間不斷向前推進,2015 年以后廣州市植被覆蓋率逐漸提升。上述分析結果與實際結果較為相符,說明本文算法動態監測效果較好。

表2 植被動態監測結果Table 2 Results of vegetation dynamic monitoring
本文研究的基于Scrapy 的農業網絡空間信息動態監測算法,在當前網絡中存在大量農業網絡空間數據信息的Scrapy 框架基礎上,構建包含信息采集模塊、信息處理模塊、信息分析模塊和信息服務模塊這四部分的農業網絡空間信息動態監測系統。該系統主要是挖掘和分析采集的農業網絡空間信息,達到識別和追蹤農業網絡空間信息的目的,可視化展示分析結果。系統中信息采集模塊采用Scrapy 框架設計網絡爬蟲,通過設計的網絡爬蟲,爬取網絡匯總農業網絡空間信息。信息處理模塊主要是處理農業網絡空間信息,動態監測和追蹤農業網絡空間信息。經過實驗分析發現,本文動態監測農業網絡空間數據算法適合應用到實際中,應用價值高。