基于python爬虫的数据获取与可视化的教学实践研究
陈星 宣震
摘要:2019粤教版信息技术必修1结合《5.2数据的采集》《5.4数据的可视化分析》的内容,采用Python编写网络爬虫与数据可视化工具的案例,并使用程序与人行为的类比逐步深入任务,通过探究学习方式让学生体验爬虫获取网页数据的完整流程,对文本数据可视化分析并得出结论,培养了学生的计算思维,让学生体会到数据保护的意义,提升了学生社会责任感。
关键词:Python爬虫;数据采集与可视化分析;学科教学
中图分类号:G434? 文献标识码:A? 论文编号:1674-2117(2020)17-0000-00
伴随着移动互联网、物联网技术的迅猛发展,数据挖掘与分析已经成为重要的研究领域。因此,《普通高中信息技术课程标准(2017年版)》在“数据处理可视化表达”这一内容下突出数据处理的基本原理,聚焦技术性工具在数据处理中的功能,强调让学生通过典型案例应用,了解数据采集、分析和可视化表达的基本方法。[1]那如何通过典型案例了解数据获取与可视化分析的过程呢。笔者从任务分解的视角,有层次地引导学生自主探索数据采集与可视化分析的实际应用。
设计思路与任务阐明
建构主义认为,学习环境中的情境必须有利于学习者对所学内容的意义建构,且学习能在和现实情况基本一致或相类似的情境中发生。[2]同时,宅还强调学生的学习活动应与任务或问题相结合,以探索问题或完成任务的方式来引导和维持学习兴趣和动机,使学生完成主动的意义建构。
例如,笔者创设了这样一个真实的情境:假如你是一名导演,你导演的电影上映了一段时间,关于这部作品,你会关注哪些方面?向学生展示豆瓣网页中电影《我和我的祖国》短评以及利用爬虫获取的短评文本分析生成关键词的词云图、柱状图、饼图、雷达图、圈图(如上页图1),提问:“大家能从图中获取哪些信息?”由此让学生初步了解数据获取与分析的作用,并阐明利用Python编写爬虫程序获取豆瓣电影短评文本数据、进行数据分析展示并得出结论的主要学习任务。
任务知识储备与分组
通过前期的学生学情分析和教学内容分析可知,本次教学内容难度较大,学生需要熟悉Python基础语法知识、HTML基础知识以及Python IDLE操作环境。学生两人为一组,分工合作完成此次学习内容。
任务分析
教师提出应如何利用计算机程序自动获取豆瓣电影短评数据并进行分析,以图表的形式呈现分析结果,引导学生将这一过程分解为五个子过程,并针引导学生思考怎样完成这五个过程,形成实施过程和人的动作的对比,使得学生能够形象地理解数据获取的基本过程(如表1)。由此进一步引导学生思考计算机程序如何获取数据的问题。
任务驱动的学习探索
1.环节一:Python爬虫基础新知
学生观看视频了解爬虫的新知。网络爬虫通常可以分为两类:通用爬虫和聚焦爬虫。通用爬虫是根据关键词爬取整个互联网的程序,常见的有谷歌、百度搜索引擎爬虫,而本次所用的Python爬虫是一种聚焦爬虫,是定向抓取与某一特定主题内容相关的网页资源的程序。
2.环节二:程序行为的形象化
由任务分析中五个过程与人的动作的对比再次深入,引导学生认知计算机程序是如何完成这个五个过程的(如表2)。
3.环节三:python爬虫基础库准备
爬虫是如何完成链接的访问和网页数据分析的呢?针对这一问题,教师讲授python爬虫程序实践需要具备两个“利器”:Requests库和BeautifulSoup库。
Requests是公认的非常好的Python第三方爬虫库,利用它可以很方便地爬取一个网页。BeautifulSoup库是灵活又方便的网页解析库,处理效率高,利用它不用编写正则表达式即可方便地实现网页信息的提取,而结合Requests和BeautifulSoup库可以实现只抓取需要的网页信息。获得一个网页最简单的方法就是利用requests.get(url),requests.get(url)构造一个向服务器请求资源的Requests对象。r=requests.get(url),即返回的内容用一个变量r来表示,这个r是Response对象,包含从服务器返回的所有相关资源。
4.环节四:任务过程的程序实现
(1)过程1:链接访问
程序实现的过程1,需要利用requests.get()方法获取某一部电影短评页面的網页资源。学生利用IDLE打开spider_gethtml.py,只需补全小组探究的具体豆瓣电影短评页面的url链接并运行(代码过程如表3)。在此过程中小组可以获取到某一部电影的短评页面资源,短评文本数据就在其中。
(2)过程2:网页分析
网页分析需要利用BeautifulSoup库对获取到的网页资源进行分析,定位豆瓣电影短评数据所在的标签位置。
首先,创建beautifulsoup对象soup:
html = r.text
soup = BeautifulSoup(html,"html.parser")? #解析取的html代码
接着,利用find_all()方法查找短评内容所在的标签列表
分析网页源代码可知,短评内容位于class=”short”的标签中,结合css选择器可以直接定位并选取出短评内容,避免了学生理解xpath路径选择的困难,这也是笔者在前期备课和后期磨课中结合学生的反馈做出的调整,任务实践中学生对这一知识点的反馈良好。学生打开spider_get_shortcomments.py,补全find_all中的内容以获取短评文本(如表4)。
(3)过程3:文本数据的保存
学生运行spider_savecsv.py将电影短评第一页的20条短评数据存short_comments.csv文件中。保存数据的代码不需要学生掌握,但要求了解其作用是将爬虫抓取到的数据以csv格式(类似表格形式)进行存储的(代码过程如表5)。
(4)过程4和5:数据分析与展示
学生利用提供的饼图、词云图、雷达图、圈图、柱状图五个Python文件,生成数据分析展示图,从中任意选择两个,完成学案中“电影短评数据分析”的内容(如表6)。
数据分析展示图生成的代码是利用Jieba库对数据进行分析,再利用matplotlib库对分析结果进行展示,因其代码对于高一学生来说较为复杂且不是本次教学目标内容,所以将可直接运行的代码给学生使用。重点在于培养学生根据具体数据灵活分析展示数据的能力。
5.环节五:任务阶段性小结
前一阶段主要介绍了网络爬蟲的分类包括:通用爬虫和聚焦爬虫,并利用Python聚焦爬虫进行了网页数据的爬取,分析表达的一般过程。作者将此过程和人手动获取分析数据的行为类比为五个过程:①爬取整个网页的HTML;②解析HTML;③定位提取数据并保存数据;④分析数据;⑤图表展示。而这五个过程可以概况为两个部分:数据获取和数据可视化表达(如图2)。
6.环节六:任务优化
在上一阶段只获取了20条电影短评数据,笔者引导学生发现数据量的不足,并不能完全展现出观众评价的问题,所以下一阶段的优化目标就是爬取更多的评价(220条)让分析更加完善。
(1)程序行为的再次形象化
再次利用人与程序行为形象的对比(如表7),引导学生理解循环程序在实际问题中的运用并 思考利用程序循环爬取11页的数据。接着,引导学生分析每一页的url,找出url变化规律为:每一电影在豆瓣电影网站中都有唯一的subjectID,只要将其在url中替换即可,每一页变化的数值是“页数*20”,这样就构造了循环url。打开spider_savecsv_220n.py,替换url链接中subjectID,运行程序循环获取电影短评11页的文本数据(如表8)。
(2)数据再分析
针对200多条评论,学生再次利用提供的五个Python文件生成数据分析展示图,从中任意选择两个,完成学案中优化单元中“数据再分析展示的方式图”表格内容。这个环节中,当全班学生同时对豆瓣电影的服务器进行爬取数据的请求时,出现了IP地址被禁止访问的情况即反爬虫现象,针对这个预先有准备的情况,笔者及时调整了讲授内容顺序,将网络爬虫所可能引起的问题提前抛出,学生观看爬虫与网络安全的视频。笔者认为在实际操作中遇到反爬虫问题,可以让学生更深刻地认识到爬虫世界的“盗亦有道”,让学生了解在利用爬虫时,要遵守一定的规则,认识到不合理使用爬虫带来的危害。经过两个阶段任务后,学生完成学案中“影评再分析总结”和“差异比较”(如表9)。
延伸思考
在完成两个阶段的任务后,引导学生思考数据获取中还有哪些方面可以完善。问题1:只爬取了前220条的短评数据,数据量依旧少,数据分析依然不够准确。问题2:爬取的数据中会存在许多无关的数据,并提示如何进行完善改进。针对问题1,可以利用爬虫进行模拟登录,爬取所有电影短评数据。针对问题2,需要对数据进行清洗,去除无效数据,如可以使用停止词或者利用Python提供的NumPy、Pandas、SciPy等数据科学扩展库进行数据处理。
阶段性小结:你认识到数据量的大小对分析评价的影响是什么?数据本身的“质量”是否会对分析结果造成影响?怎样解决?经过本节课的学习和实践,你认识到的网络爬虫会带来哪些问题?
拓展学习
向学生展示一个“南京二手房”分析报告再次明确问题分析的一般过程。请学生选择一个自己感兴趣的问题,结合本节课内容,课后进行探究(拓展学习表如表10)。
任务驱动学习的策略
(1)任务的设置要有目的性,围绕真实情境完成知识建构
教师根据生活场景的实效性,围绕一个真实的情境设计学习任务。本节课以学生为主体,从一个导演的角度探究观众对电影的评价,情境的设置具有一定的真实性,并用《我和我的祖国》作为案例,增强了学生的爱国主义情怀,让学生能够在具有真实目的性的情境中完成有意义的知识建构。
(2)任务的难度要有层次性,符合认知的规律
任务的难度设置要循序渐进,关键就在于要将每个过程细化并且能够让学生易于理解,逐步完成每一个小任务,依次扩展完善,最终完成整个任务。本次案例将任务分为两个阶段。在第一个阶段中,将“人获取数据的动作”和“程序的行为”进行了类比并将任务分解为五个过程,让学生理解利用python爬虫获取网页数据的完整流程。在第二个阶段中,设置了“怎么获得更精准的评价”的问题,引导学生思考如何利用程序的优势循环获取大量数据,培养学生自我探究和计算思维能力。前后两个阶段的任务具有递进关系,并且将真实的问题融入循环程序教学知识点中,不仅让任务难度有层次性,而且也符合学生的认知发展规律。
(3)任务要具有启发性,促进学生自主学习能力
完成任务不是最终目的,真正有价值的任务是要给学生以启发。结构主义教学论提出者布鲁纳认为,要使学生理解和掌握学科的基本结构,领会基本的原理和概念,要有利于知识的迁移和运用,使其达到举一反三、触类旁通的境地。[3]本次案例的最终目的是让学生能够了解数据获取和可视化表达的基本方法,并能在学习和生活中迁移运用,所以在课后的拓展学习中也要求学生找一个感兴趣的问题,结合本节课知识框架去自主探索,在培养学生自主学习能力的同时,也让他们在解决学习、生活问题的过程中提升了社会责任意识。
结语
现代教育家杜威提出的学生中心、活动中心、经验中心的三中心理论,强调“从做中学”,学生能在自身的活动中进行学习,开始他的自然发展进程,只有通过富有成效和创造性的活动,才能获得和牢固地掌握有价值的知识。[4]以真实情境为切入点,以任务解决为抓手的教学,能够使学生积极地参与到学习中来,主动探索,在任务解决的过程中不断自我构建知识体系,实现学科核心素养的提升。同时,教师通过对教学内容的打磨设计,不仅加深了对课标内涵的理解,提升了专业素养,而且为学科教学提供了良好的案例。
参考文献:
[1]任友群,黄荣怀.普通高中信息技术课程标准(2017年版)解读[M].北京:高等教育出版社,2018:59.
[2]殷常鸿,张义兵,王晴燕.运用知识建构圈促进学生课堂深度互动研究[J].中国电化教育,2020(02):102-108.
[3]余文森.布鲁纳结构主义教学理论评析[J].外国教育研究,1992(03):13-16.
[4]刘广利,汤慧丽.杜威的“从做中学”教学理论及对我国基础教育的启示[J].继续教育研究,2008(05):84-86.
作者简介:陈星,南京市第十三中学教师;宣震,中学高级教师,南京市玄武高级中学教师,研究方向为信息技术教学。
基金项目:本文为南京市教育科学“十三五”规划2016年度课题“基于智慧校园的高中学生STEM项目学习及成效评估研究”阶段性成果,课题批准号:L/2016/083。