徐鄭琴
摘要:在番茄病蟲害防治中常常出現因資料分散而導致的信息獲取不全或是利用效率低等問題,為此提出利用計算機技術設計一套針對開放網絡上的多方數據進行收集與整理的方法。該方法基于Scrapy框架依次確定爬取對象、設計爬取流程、分析原始網頁、存儲相關數據,最后依托Django框架搭建可視化界面用于前端與后臺的數據交互。由此實現了對各類數據的有效收集和按規則的結構化存儲,為在番茄病蟲害領域搭建系統、專業的知識庫提供數據依據。
關鍵詞: 番茄病蟲害;計算機技術;Scrapy;Django;結構化存儲
中圖分類號:TP311? ? ? 文獻標識碼:A? ? ? 文章編號:1009-3044(2019)03-0024-02
Abstract: In the prevention and control of tomato pest and disease, the problems of incomplete information acquisition or low utilization efficiency caused by data dispersion often occur. Therefore, it is proposed to use computer technology to design a set of methods for collecting and sorting out multi-party data on open networks. The method is based on the Scrapy framework to determine the crawling object, design the crawling process, analyze the original webpage, store the relevant data, and finally build a visual interface based on the Django framework for data interaction between the front end and the background. This achieves effective collection of various types of data and structured storage according to rules, providing data basis for building a systematic and professional knowledge base in the field of tomato pest and disease.
Key words: tomato pest and disease; computer technology; Scrapy; Django; structured storage
1 概述
在可持續發展背景下,為提升農業產量提出精準農業概念。番茄作為一種種植較為普遍的蔬果類作物,深受人們的喜愛,但在番茄種植過程中,病蟲害的防治是十分關鍵的環節[1]。如何在擴大種植面積的同時,對病蟲害進行有效防治甚是關鍵。與以往單純依賴經驗進行病蟲害識別相比,精準農業背景下依靠知識庫的番茄病蟲害防治有以下優勢:一、專業性較強的數據庫,不受地域及種植者本身經驗限制,適用于大范圍普及,可實時更新。二、利用Scrapy的優勢,將大量分散的資料集合到一起,圖片和文字結合存儲,并直觀地為種植者提供最新即時的救治建議。因此,本文針對番茄病蟲害進行一系列工作,基于Scrapy框架對數據進行爬取并存儲。
2 Scrapy爬蟲框架
Scrapy是一個目的為了爬取網站內容,提取結構性數據而編寫的開源爬蟲應用框架,可以應用在包括數據挖掘、信息處理或者存儲歷史數據等一系列的程序中[2]。其框架主要由Scrapy Engine、Scheduler、Downloader、Spiders、Item Pipeline五部分組成,如圖1。Scrapy是純 Python 實現的應用爬蟲框架,基于Twist的異步處理,使用起來相對簡單輕巧[3]。
其中,Scrapy Engine指引擎,負責數據和信號在不同模塊間的傳輸,是整個框架的核心;Scheduler指調度器,用于接收引擎發送過來的爬蟲任務,并按照一定規則將它放入待爬取隊列;Downloader指下載器,負責下載Requests請求,并將Responses返回給引擎,該部分采用異步方式與遠程服務器建立聯系,大大提高了爬取效率;Spiders指爬蟲,處理引擎發送過來的Response,提取數據和URL,并將結果返回給引擎;Item Pipeline指管道,用于進一步處理Spiders發送過來的數據,例如數據清洗、持久化存儲等。用戶可在Spiders和Pipeline中根據需求自定義所需爬蟲及存儲位置。
2 數據爬取
2.1 確定爬取對象
番茄病蟲害數據分布于各大農業及百科類網站,可分為結構化數據、半結構化數據、非結構化數據三種。利用爬取到的數據為農業從業人員提供防御和治療依據是數據收集的目的,因此確定以番茄病蟲害名稱、癥狀描述、發病特征、治療方法、圖片為主的爬取對象。但番茄病蟲害的命名方式在開源網絡上的存在不統一性,例如“番茄芽枯病”與“西紅柿芽枯病”這類同類不同名的命名、“番茄有害氣體”這類概括性命名等,這將導致對多源數據進行直接爬取后的數據冗余、缺失問題,因此,在比較各方網站后,確定先以農業醫院網為主,百度百科、互動百度為輔,整合番茄病蟲害名稱,再進行后續爬取。
2.2 設計爬取流程
根據確定的番茄病蟲害名稱,從多方數據源中爬取所需數據,以在互動百科為例,設計數據爬取流程,如圖2。
系統先根據番茄病蟲害名稱對互動百科詞條的初始URL進行解析,響應內容包括URL和數據。URL解析時,相關模塊會基于定義的HTML規則將該頁面中所包含的其他詞條URL保存至詞條URL庫中[4]。系統不斷地對詞條URL庫中的URL進行解析,并將獲取到的數據內容存儲在csv文件中。
2.3 網頁對象分析
Web網頁是結構化的,網頁中的任何內容都處于結構體中,因此可以在結構體的路徑中查詢到[5]。以番茄褐色根腐病在互動百科中的詞條為例,詞條條目包括名稱、簡介、基本信息、危害癥狀等。利用Chrome瀏覽器的F12快捷鍵,可以查看與詞條的條目一一對應的源代碼、在網頁中的結構體路徑,如圖3所示。在此基礎上,利用xpath定位到詞條中的元素、屬性、文本等節點,從而獲取所需部分。例如,利用以下語句可提取到番茄褐色根腐病簡介部分的文字,其中的定位方式為選擇標簽是div且類屬性依次為w-990、l w-640、information、summary下的文字段落。
3 數據存儲
數據存儲是將數據可視化的前一步驟,選擇合適的數據庫和數據存儲方式將直接影響到前端網頁搭建時的煩瑣程度。由于本文爬取的數據內容中不僅包含文字,同時還大量包含圖片這一類型數據,并且圖片這類數據將作為后期工作的核心,因此本文采用了非關系型數據庫Neo4j。目前主流關系型數據庫管理系統有:SQL Server、MySQL、Oracle等[6]。與關系型數據庫不同,非關系型數據庫在處理圖片、文檔、電子郵件等非結構化數據存在較多優勢。為了讓數據存儲更具有條理性,以及更方便靈活地被使用。在存儲過程中,對番茄病蟲害名稱以及圖片進行編號存儲,并以編號作為主鍵,增設唯一約束。名稱的編號采用五位數字形式,前兩位代表發病部位(01,根;02,果實;03,莖;04,葉子),發病部位由手動區分,后三位代表相同發病部位下的不同番茄病蟲害名稱,例如,0100101。圖片的編號方式采用七位數字形式,在名稱編號的末尾增加兩位,表示同一番茄病蟲害的不同圖片,例如,0100101。編號存儲的形式使數據之間的聯系性增強。最后,即可將存儲在本地的csv文件導入數據庫。
4 數據應用
通過上述一系列步驟,我們將分散在互聯網各處的有關番茄病蟲害的非結構化數據進行了梳理整合,通過Scrapy技術將其以結構化的形式存儲于數據庫中。然而對于目標人群,例如農技人員、普通種植戶等,依舊無法直接對數據進行查看甚至利用。因此,本文利用Django網頁框架為用戶搭建了番茄病蟲害搜索界面,從而方便目標人群使用及幫助完善。Django 框架是基于Python語言編寫的一個開源免費的Web應用框架[7]。在用戶輸入界面中提供了兩種查詢方式,包括按病蟲害名稱查詢和按發病部位查詢,在單擊查詢后即可獲取相應的搜索結果。
4.1 按名稱搜索
圖4以番茄褐色根腐病為例展示了按病蟲害名稱的搜索結果。利用用戶輸入的名稱關鍵字,在數據庫中進行關鍵字匹配,返回存儲在數據庫中相對應的結果,結果包含名稱、發病部位、癥狀描述、特征、治療措施等,并以知識卡片的形式呈現給用戶。
4.2 按部位搜索
圖5以果實為例展示了按部位的搜索結果。番茄病蟲害的發病部位主要包括根、莖、葉、果實四大類,根據用戶的選擇,返回所有存儲在數據庫中有關該部位的所有病蟲害名稱。在此接口中,可以查詢到所有番茄病蟲害的名稱。
5 結論
本文重點以番茄病蟲害為例從多方面具體介紹了Scrapy爬蟲的方法。番茄病蟲害的防治重點在于作物種植的有效監控和科學治理[8]。將爬蟲技術合理應用于番茄病蟲害防治的前期工作中,進一步推動番茄病蟲害數據的信息化與規范化,以便為日后應用打下基礎,從而也促進農業作物的數據化發展。與此同時,收集到的數據可應用于多方面。例如,利用圖片特征結合名稱標注,建立了能夠完成病種判別的神經網絡;利用文字信息歸納總結針對同種作物病害不同救治方法或不同作物同種救治方法;甚至可以考慮結合智能化機器,利用機器可以完成自動化監測、對農作物進行智能化保護、針對性變量噴藥、病害遠程診斷等,真正達到精準農業的目標。
參考文獻:
[1] 吳軍,倪萌,夏倩,等. 江蘇無錫市設施番茄病蟲害發生特點與綠色防控策略[J].中國園藝文摘,2017,33(10):195-197.
[2] 安子建. 基于Scrapy框架的網絡爬蟲實現與數據抓取分析[D].長春:吉林大學,2017.
[3] 孫小越,王超.基于Scrapy框架的電商數據分析平臺[J].電腦知識與技術,2017,13(28):276-278.
[4] 鄂世嘉,林培裕,向陽.自動化構建的中文知識圖譜系統[J].計算機應用,2016,36(4):992-996+1001.
[5] 李喬宇,尚明華,王富軍,等.基于Scrapy的農業網絡數據爬取[J].山東農業科學,2018,50(1):142-147.
[6] 肖慶都,屈亮亮,侯霞.基于Neo4j圖數據庫的課程體系知識圖譜系統設計與實現[J].電腦知識與技術,2017,13(36):130-132.
[7] 楊君,陳春玲,余瀚.基于Scrapy技術的數據采集系統的設計與實現[J].計算機技術與發展,2018,28(10):177-181.
[8] 余世英.病蟲害防治技術在番茄種植過程中的應用分析 [J].農家科技,2016(11):105.
【通聯編輯:謝媛媛】