学生信息管理微信小程序数据构建探析

学生信息管理微信小程序数据构建探析

摘要:随着信息化建设步伐的不断加快,为满足校园信息化建设的要求,需要为学生开发一款基于微信小程序的学生信息管理平台,整合学校各信息系统资源,方便学生使用,减少不必要的操作。该平台将采用python爬虫的方式,在教务系统、学工管理系统、实习平台等获取相关的数据,利用爬虫实现带验证码和反爬机制的虚拟登陆,并通过scrapy框架获取系统中的数据,实现资源整合。

关键词:python;爬虫;scrapy框架;资源整合

1引言

随着学校信息化建设不断推进,各类系统平台不断开发并投入使用,提高了学校师生的信息化水平。但在进行相关系统平台建设的过程中,不同的部门对系统平台有各自的要求,这样导致学校的系统各自独立,数据不互通,登录账户也各不相同。如涉及学生的系统就包含了学工系统、教务管理系统、实习系统等,导致学校存在数据孤岛的问题,数据在不同部门相互独立存储,独立维护,彼此间相互孤立,形成了物理上的孤岛。为了解决数据孤岛的问题,需要对信息系统数据做进一步的整合。在节约学校开支的前提下,开发一款基于微信小程序的学生信息平台,通过使用python网络爬虫的方式从各个信息系统进行信息的爬取最终整合到一个平台上,方便用户使用。本文将以获取教务系统中的课程表为例,探讨如何通过爬虫,采用模拟登陆的方式,在微信小程序中快速获取相关信息[1-3]。

2爬虫设计

2.1技术概述。2.1.1Selenium。Selenium是一个模拟浏览器操作的测试工具。使用Selenium,安装相应的浏览器驱动,便可以直接对浏览进行操作,就像真正的用户在操作一样。兼容市面上各种主流浏览器包括IE(7或以上)、MozillaFirefox、Safari、GoogleChrome、Opera等。Selenium主要功能包括:用于检验开发项目在不同浏览不同系统的兼容情况,利用脚本,使用selenium进行模测试工作。通过创建回归测试检验用户需要和软件性能以检验系统功能是否正常。可以根据不同的开发环境和编程语言如.NET、JAVA等进行测试脚本的录制工作[4]。2.1.2requests。requests是由python编写的常用的网络请求http库。request代码编写简洁,功能十分强大。在python内置模块的基础上进行高度的封装,从而使得python进行网络请求时,变得人性化,使用requests可以轻而易举完成浏览器的任何操作。2.1.3ScrapyFrameworkScrapy。是现在主流的数据爬虫框架,用以提取网络中的各种数据,有着较为广泛的用途。Scrapy常应用于数据挖掘、数据获取、数据处理数据存储等一系列过程。使用Scrapy框架可以很简单地实现从互联网中获取指定网站中的内容。2.1.4TesseractOCR。TesseractORC(OpticalCharacterRecognition,光学字符识别)是一个用于文字图形转换的开源引擎,由HP实验室开发并由Google进行维护。它可以通过不断地进行机器训练,通过优化训练集,来改善结果集,从而获得自己想要的结果。2.1.5PEEWEEORMPEEWEE是python中常用的数据库映射模块,是一个轻量级的ORM,即对象关系映射(ObjectRelationalMapping,简称ORM)。其特点是通过映射关系对数据进行操作,使得对各类数据库能够实现兼容,通过映射来实现对数据库的各种操作,使用户对于数据库的使用成本大大降低。

2.2系统需求及分析。网络爬虫系统的开发是否成功取决于系统能否实现用户定制功能,达到预期设计目的。因此,在网络爬虫系统开发前,需要对该系统需求加以详尽分析,从而对整体设计有一个清晰的思路。目前,普遍适用的爬虫系统都是模块化的。模块化的程序设计有利于代码块的测试与维护,而且也进一步增加了代码的适用性。在此基础上,只要对各个模块进行组合,就能够构建出一个完整的爬虫系统。本文以获取学院教务系统中的课程表为例,开展模块化的编程设计。由于爬取教务系统中的数据前需要进行登录操作,所以想要获取系统中的相应信息就必须解决如何登录的问题,包括如何自动填入用户账户和密码、如何自动识别验证码等问题[5-6]。

2.3爬虫设计。2.3.1爬虫模块介绍。要爬取页面的信息需要借助相应的爬虫模块,本文所使用到的模块包括:requests,python中常用的发起网络请求的模块;Scrapy,python中最主流的爬虫框架;peewee,轻量级ORM框架,用于python和Mysql等数据库的映射操作;selenuim,用于网页测试的模块,使用该模块来实现模拟登陆的环节;Pillow,python中常用的图片处理模块,使用该模块对验证码进行处理;Tesseract,python中图像识别的模块,利用OCR光学字符识别对验证码进行识别。2.3.2流程分析。(1)使用selenium模块调用浏览器打开指定页面,利用Xpath定位到用户名和密码输入框,并通过send_key()方法,填入用户名和密码。(2)使用Pillow模块配合selenuim截取页面中的验证码部分,通过Pillow对登陆验证码进行预处理。(3)使用Tesseract-OCR对验证码进行识别。(4)登陆到页面后保存Cookie和session,通过requests获取目标信息。(5)通过peewee框架将获取到的内容存放到Mysql。数据爬取流程如图1所示。

3系统的设计与实现

为整合校内各平台数据资源,降低数据孤岛的影响,减少学生因校内平台众多所带来的不必要的操作,开发一款针对学生的信息管理微信小程序,使得学生们只需要通过手机移动端,便能获取到校 内各平台数据。数据获取作为小程序构建最重要的核心内容,将通过数据爬虫的方式进行获取。本文以爬取教务系统中的学生课程表为例。学校的教务网站需要用户登录以后才能获取相应用户的信息,并且该网站的登陆验证采用的是4位数字加英文混合的验证码的验证模式。为了解决用户自动登陆的问题,其中如何能够准确地识别验证码将会是一个重点。登陆到页面后,需要获取目标信息——课程表。通过requests请求系统中的课程表页面URL获取相关的信息,通过对页面的分析,对目标页面发起请求,需要包含相关的cookie和header,否则将无法从目标页面获取想要的信息[7-9]。

3.1登录信息设计。登录信息主要涉及到登录页面中的用户名、用户密码以及验证,只有三者皆输入正确后,才可以登录到后台的页面。其中用户名和密码为确定值,而验证码是一个随机值,在解决自动登陆的环节中,主要是解决验证码的问题。首先通过selenium操控浏览器打开教务系统网站,通过Xpath快速定位到网页中的用户名、密码和验证码的输入框。通过send_key()方法,将相关信息传入输入框内,验证的值则需使用第三方库进行机器识别。

3.2验证码处理设计。验证码图片是页面代码动态生成,只能通过selenium定位元素,并配合pillow的crop()方法进行截取。由于截取到的二维码背景带有感染,直接通过机器识别会降低识别率,所以要对图片进行预处理。通过pillow模块将截取的二维码图片进行二值化处理。图像的二值化,就是将图像上的像素点的灰度值两极分化(设置为0或255,0表示黑,255表示白),也就是将整个图像呈现出明显的只有黑和白的视觉效果。目的是加深字符与背景的颜色差,便于Tesseract的识别和分割。对于阈值的选取,使用0和255的平均值。并通过处理再将背景的干扰项进一步清除,如图2所示。将预处理完的图片交由Tesseract-OCR进行机器识别[10]。图2验证码通过二值化处理效果图

3.3信息获取设计。登陆进系统后,获取到页面的cookie_jar,准备对目标信息进行获取,通过requests的get方法对目标url发起请求并携带相应的cookie信息,以获取需要的信息。但实际操作发现,并不能返回正确的结果。通过对网页的分析发现,在发起requests请求除了要携带cookie外,还需要有相应的header的referer信息。通过request携带相应的cookie和header后,便从目标url中获取到想要的数据。

3.4信息处理。通过scrapy爬虫框架,对目标url发起requsets请求获取想要的数据,将获取到信息通过轻量级ORM的框架peewee,存储到目标Mysql中。

4结束语

本文以爬取学校教务系统数据据为例,介绍了模拟登陆爬取数据的程序设计,并作为学生信息系统微信小程序的数据来源。该系统通过爬虫获取数据构建,解决了学校平台众多、数据孤立不互通等问题,帮助学生们减少了许多不必要的操作,在小程序中集中数据呈现给学生,方便操作。

作者:郝佳睿 单位:广东食品药品职业学院软件学院