基于Scrapy的番茄病虫害数据收集

2019-03-25 08:01徐郑琴
电脑知识与技术 2019年3期
关键词:计算机技术

徐郑琴

摘要:在番茄病虫害防治中常常出现因资料分散而导致的信息获取不全或是利用效率低等问题,为此提出利用计算机技术设计一套针对开放网络上的多方数据进行收集与整理的方法。该方法基于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.

【通联编辑:谢媛媛】

猜你喜欢
计算机技术
计算机技术在财务会计中的运用
关于计算机科学与技术未来发展趋势的相关探讨