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