基于网络爬虫的在线做题难易度可视分析
2022-06-15柳菁范恩童杰
柳 菁 范 恩 童 杰
(绍兴文理学院 机械与电气工程学院,浙江 绍兴 312000)
0 引言
编程能力是计算机专业学生应具备的基本专业能力.编程能力的培养需要学生具备扎实的数学基础、清晰的逻辑思维能力、灵活的数据建模能力,并熟练掌握程序开发环境及语言、测试工具、软件工程规范等计算机相关专业的知识. 它直接影响学生毕业后工作情况及薪资水
平[1-2].对计算机程序设计语言的学习有助于提升学生的逻辑思维能力以及解决实际问题的能力.
在线判题系统(Online Judge, 简称OJ)是高校编程能力训练的一种常用工具,已经广泛应用于各种程序设计类课程,很多高校已先后建成在线做题系统[3-7].在浙江省内,以浙江大学、浙江工业大学、杭州电子科技大学等高校为代表,也都先后建有OJ系统.其中,“拼题A(PTA)”是以浙江大学近20年在程序设计能力培养、精品与资源共享课程建设、在线开放课程建设、教学团队建设等方面的工作为基础,针对程序设计、数据结构等程序设计类课程的实践性特征,重点结合新兴的在线课程建设需求以及不同层次学校在程序设计类课程方面的实践教学的需求而设计的.同时,它致力于打造面向学校与企业的优质教学资源的共建、共享平台,开创了互联网时代多校-多企共同参与、共同建设、共同利用教育资源的新模式.
高级语言教学过程中,以OJ平台进行教学,运用探究式教学模式,既能注重过程考核,又能突出学生的主体作用,特别是提高学生的实践动手能力,同时也能够较好地提高教学效果[4].在数据结构的实践教学过程中,以OJ平台中存在的问题为核心载体,通过课堂内、外的自主探究与合作探究,既能够凸显学生学习的主体性、实践性,又能提高学生的实践能力,从而可以保障教学质量[5].因此,通过OJ在线做题平台,对于计算机专业涉及的编程相关课程及实践环节,均具有明显的学习效果.为此,通过学生在OJ平台上的做题成绩及相关数据,有助于教师更好地了解学生的学习情况以及课程知识掌握情况.考虑到学生的编程基础不同、自觉性不同,特别是考虑到学生线下在OJ上做题,需要通过学生在OJ上做题的情况,分析题目的难易程度以及学生的掌握程度.
李文华根据网络爬虫系统的基本原理,从爬虫的设计原则与模块结构入手,开发出一种基于Python的网络爬虫系统[8].为从51job网站获取有效的岗位招聘信息,甯文龙等采用Python的爬虫技术对爬取的岗位信息进行预处理,帮助用户节省搜索和查询匹配岗位的时间[9].通过对51job网站所有数据进行爬取、统计和整理,刘一等进一步提出一种基于Python的就业趋势可视化系统[10],张俊威等对基于Python爬虫的网页抓取技术进行概述,并对其相关应用进行分析[11].通过分析PCBA工业化过程中存在的问题,吕世超提出一种基于Python语言的自动化测试系统,能够较好地提高生产测试效率[12].为了更好地对国内电影网站数据进行分析,高巍等利用Python网络爬虫技术从豆瓣网爬取电影的相关数据,然后对数据进行可视化分析[13].针对微博舆情监控的实际需求,刘子谦等开发出基于爬虫的文本微博舆情分析系统[14].为了分析灾害舆情和估计灾害损失,李绍攀等利用网络爬虫爬取微博数据,将Bayes情感分析模型用于自然灾害舆情分析[15].
综上所述,考虑到爬虫在获取网页数据上的优势,本文通过Python中的Xpath、Pandas、Beautiful Soup等工具,开发一个自动化测试登录的爬虫程序,爬取PTA中学生的学习数据,然后对其数据进行可视化分析,最后从不同角度切入,分析题目的实际难易程度以及学生对知识点掌握的程度.
1 系统的设计思想
为降低数据获取的成本,利用Python的第三方库,比如Pandas、Beautiful Soup等,对PTA网址进行自动化登录并对网页做题数据进行爬取和可视化处理.该系统主要包括以下功能:(1)利用Selenium工具模拟真实用户上网行为,并进行网站自动化登录,同时实现对图片验证码进行自动化测试;(2)利用Pandas、Beautiful Soup等工具对网页内指定内容数据进行爬取;(3)将爬取下的数据存入CVS格式的Excel文件;(4)通过对读取爬取数据,对数据进行相应的可视化处理.
2 系统开发与实现
2.1 系统组成
系统的主要工作流程(见图1)如下:①完成用户名和密码自动输入.主要利用Selenium库,编写程序模拟用户自动登录目标网站,使网站不会识别为自动化代码程序,避免被浏览器拦截的风险;②检测并自动验证.主要利用Image库,将弹出的验证码图片进行截图,对空缺处进行位移和缩放计算,然后模拟用户点击滑动按钮并与空缺处对齐;③爬取网页内所需数据.利用Pandas库等,获取网页内表格数据,并且保存为本地报文,同时存储到CSV文件中;④数据可视化.利用matplotlib库对爬取的数据进行可视化.
图1 系统工作流程图
2.2 Selenium库
Selenium是一个用于Web应用程序测试的工具.它可以直接运行在浏览器中,模拟用户操作,支持IE、Mozilla Firefox、Safari、Google Chrome、Opera、Edge等浏览器(见图2).
图2 Selenium支持工具图
Selenium的主要功能包括测试与浏览器的兼容性、测试系统功能、创建回归测试以及检验软件功能和用户需求.它支持自动录制动作和自动生成.Net、Java、Perl等不同语言的测试脚本.
框架底层使用JavaScript实现模拟用户操作浏览器.执行测试脚本时,浏览器自动按照脚本代码完成点击、输入、打开、验证等操作,从终端用户的角度测试应用程序.此外,Selenium库使用简单,可以采用Java、Python等多种语言编写用例脚本.
2.3 Pandas库
Pandas是NumPy的一种工具,主要用于解决数据分析任务.Pandas纳入大量的库和一些标准的数据模型,提供高效操作大型数据集所需的工具,以及能够快速便捷地处理数据的函数和方法.
常用的数据类型有以下6种.①Series:一维数组,能够存储不同种数据类型,字符串、boolean值、数字等都能保存在Series中.②Time-Series:以时间为索引的Series.③DataFrame:二维表格型数据结构,可以将DataFrame理解为Series的容器.④Panel:三维数组,可以理解为DataFrame的容器.⑤Panel4D:4维数据容器.⑥PanelND:拥有factory集合,可以创建像Panel4D一样N维命名容器的模块.⑦PanelND:拥有factory集合,可以创建像Panel4D一样N维命名容器的模块.
2.4 Beautiful Soup库
Beautiful Soup能够提供一些简单的、Python式的函数用来处理导航、搜索、修改分析树等功能.Beautiful Soup能够自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码.
Beautiful Soup能够将复杂HTML文档转换成复杂的树形结构,每个节点都是Python对象,全部对象可以归纳为4种.①Tag:可以利用soup加标签名获取对象标签的内容,对象的类型是bs4.element.Tag;Tag有两个重要的属性,即name和attrs.②NavigableString:利用.string可以获取标签的内容.③Beautiful Soup:Beautiful Soup对象表示文档的内容;它可以作为Tag对象,表示一个特殊的Tag.④Comment:表示一个特殊类型的NavigableString对象.
3 实验分析
3.1 数据采集
为便于准确掌握PTA平台上学生的做题情况以及分析题目集的难易情况,首先采用Python自动爬取PTA上的学生成绩数据以及题目信息,然后对爬取的数据进行可视化分析.部分爬取的统计数据如图3所示.从图3可以看出每一条原始记录,主要包括提交时间、提交状态、分数、耗时、题目编号等字段.
图3 部分原数据
数据采集功能的主要代码如下.这里主要通过Selenium模拟用户自动登录PTA,爬取页面中用户的相关做题数据,并将其存储到本地文件,为进一步分析题目难易程度做好准备.
3.2 数据分析
图4是单个编程题的通过数和提交数比例.由图4可以看出,该题的通过数只占提交数的22.2%,说明该题较难且大多数学生对所涉及的知识点掌握不扎实.
图4 通过数与提交数对比图
图5是一个题目集的通过情况.通过图5可以清楚看到各个题目通过率的高低以及各个习题通过率的对比.在图5中,拐点越高,说明该题的通过率越高、难度越低,学生对该题所涉及的知识点掌握比较扎实;相反,拐点越低、通过率越低,说明该题难度较大,以及学生对该题涉及的知识点掌握不牢.结合图4和图5进行分析,可以看出该题目集的难易程度以及学生对所涉及知识点的整体掌握情况.
图5 习题通过率
图6和图7给出了部分题目以及整个题目集的通过数和提交数的对比.通过图6和图7对提交数和通过数比较分析可以得到如下规律:通过数随着提交数的变化而变化,反映学生在遇到难题时会进行多次提交,这也反馈出学生做题的实际情况.
图6 部分题目提交数和通过数对比
图7 整个题目集的提交数和通过数对比
图8给出了各题的分值及其实际平均分.根据平均分的折线趋势,可以看出编程题的难度一般比函数题的难度大;通过对函数题和编程题的平均分对比,可以看出整个题目集的综合难易程度较大.
图8 平均分值对比
由图9和图10可知,通过对学生的做题平均得分,可以计算出该题目对学生的实际难易程度并进行分类.根据实际得分,可以将题目分为四个类别:0.5以上通过率对应题目的难度为容易,0.4~0.5通过率对应题目的难度为一般,0.3~0.4通过率对应题目的难度为困难,0.3以下通过率对应题目的难度为较难.
图9 每题平均得分
图10 学生掌握情况图
图11统计了题目难易度及其题目个数.在PTA平台中,每道题目的难易程度被网站判题系统分为难度1和2,这与实际情况可能有些出入.对于不同高校的学生,可能出现将难度低的题目定为难度高的情况.通过图11进行数据分析,可以得出大部分题目的预期和实际难度比较一致.因此,题目难度符合预期.
图11 题目难易度及其题目个数
4 结语
为了提高计算机编程的实际教学效果,更好地利用好第三方做题平台,及时掌握学生的在线做题情况,本文利用基于Python的自动化测试工具从在线做题系统爬取学生的做题数据.基于Selenium+Python的自动化测试应用可以减少人工重复验证次数,提高数据的爬取效率.通过数据可视化分析,可以更深入地了解学生的做题情况以及题目的难易程度.后期将进一步优化提高控件可视化识别的效率,加快元素定位的效率.