项目式学习在高中信息技术教学中的应用

2022-05-15 15:16陈文剑
广东教学报·教育综合 2022年53期
关键词:项目式学习高中信息技术

陈文剑

【摘要】项目式学习是一种以学生为中心的教学方式。在项目式学习过程中,学习者会积极地收集信息、获取知识、探讨方案,以此来解决具有现实意义的问题。本文以Python语言为基础,把项目式学习融入到高中信息技术教学中,通过网络数据采集培养学生分析问题和解决问题的能力,提升学生的信息素养。

【关键词】高中信息技术;项目式学习;Python爬虫;网络数据采集

《普通高中信息技术课程标准(2017年版2020年修订)》提倡使用项目式学习。项目式学习是一种以学生为中心的教学方式,在项目式学习过程中,学习者会积极地收集信息、获取知识、探讨方案,以此来解决具有现实意义的问题。因此,在项目式学习过程中,学生不仅要学习《课程标准》的相关内容,还要懂得如何在现实生活中将这些知识学以致用。结合高一开设的Python编程教学和必修一第五章第二节《数据的采集》,引导学生学以致用,设计了这个教学项目。

一、项目情境背景

随着信息技术的发展,网络购物已是一种时尚和趋势,大家购物时总希望能买到物美价廉的商品,许多消费者在网购时都会留意商品的价格和销量。为了帮助大家更好更快地在购物网站上获取搜索商品的名称、价格和销量,通过网络数据采集实现商品信息定向爬取,我们使用所学的Python知识编写一个爬虫程序来获取网页中的数据。所谓“网络爬虫”,是一种按照一定的规则,自动地抓取万维网信息的程序,通俗地讲就是通过程序去获取web页面上自己想要的数据。

这个项目以映射真实世界问题为学生提供学习情境,对高中生富有挑战性的体验,同时也能更加驱动他们探究的积极性。

二、项目教学目标及任务

学生已经具备Python语言的基本知识和初步技能,能编写简单的Python程序,但没尝试过使用Python进行网络数据采集,缺少相关的认知和体验,从现实抽象出来问题并解决有一定难度。本项目的教学目标如下:

(1)了解requests.get()的方法去获取网页的数据;

(2)理解re模块中findall()函数匹配商品信息的方法;

(3)理解str.split()函数对字符串进行切片的方法,利用xlsxwriter模块创建xlsx文件并添加数据到文件中;

(4)掌握列表的基本操作方法;

(5)通过小组协作,学会查找和合理利用数据解决生活中的实际问题。

本项目教学任务:通过Python爬虫程序获取淘宝搜索商品页面的信息,提取商品名称、价格和销量,并把爬取到的商品数据以Excel文件的格式存储。

三、项目学习的流程

根据项目的主题,首先明确要爬取的网站和数据,通过合适的方法获得页面信息,再把解析出来的页面数据输出,以问题为驱动和导向,学生积极、主动地获取知识,进行有针对性的学习和研究,将学习到的知识转化为能力,应用到实际问题的解决中。本项目学习流程如下图:

四、项目教学的过程

(一)项目引入

问题:如何在购物网站上获取搜索商品的名称、价格和销量?

活动:教师提出问题,学生分组讨论和思考

设计意图:项目主题联系实际生活,引起学生共鸣。很多学生获取搜索商品的名称、价格和销量都是通过购物网站上的搜索引擎进行查找的,但商品数量繁多令人眼花缭乱,手动收集方式不太适用。本项目以学习如何使用python程序快速、自动地定向爬取商品信息,实现网络数据采集。

(二)项目分析

活动:学生分组讨论选择一个广为人知、商品的种类比较丰富,数据具有一定的开放性等特点的网络商城。

设计意图:挑选能够实现商品信息定向爬取的购物网站,结合获取数据的难易程度,决定把淘宝网作为获取商品信息的来源。

(三)项目实施

环节一:获取网页数据

活动1:查看网页的cookie和user-agent信息

问题:为何使用cookie和user-agent?

知识技能:了解网页的cookie(储存在用户本地终端上的数据)和user-agent(HTTP请求头)的作用。

设计意图:因为许多网站都实施反爬虫机制,当我们用requests get( )直接访问淘宝网站,除了网址不提供其它的信息,那么网站收到的cookie和user-agent是空时,会被直接识别是一个机器人,不让访问及爬取它的网站信息。借助cookie和user-agent把我们的python爬虫程序偽装成一个正常的访客,从而达到接入网站的目的。

活动2:商品翻页时地址处理

设计意图:因为我们要爬取的商品信息页面往往不止一个,当数据进行翻页时,我们需要找出网址变化规律。在淘宝网可发现,查询商品的第二页开始,每一页最后是s=xx,xx是44的倍数,因为搜索页每页有44个商品。找到规律后,构造查询商品网址url的语句如下:

url='https://s.taobao.com/search?q=+goods+'&s='+ str(44*i) '

活动3:利用requests.get()获取网页信息

知识技能:理解python第三方库requests.get( )获取网页信息

设计意图:requests库是网络请求库,requests.get( )方法的作用是发出标准的HTTP请求的动作,把cookie和user-agent添加到requests.get()的请求头中,模拟用浏览器打开一个网页获取数据,再使用text属性取得网站返回的网页源代码。获取网页数据的关键过程及语句如下:

import  requests

header = {'cookie': 'miid=42...

'user-agent': "Mozilla/5.0... }

#登录淘宝账号,按F12打开开发者模式获取cookie和'user-agent

result= requests.get(url, headers= header)

result.encoding = result.apparent_encoding

html=result.text

环节二:解析页面数据

知识技能:掌握re模块中findall()函数匹配商品信息的方法;掌握split()函数对字符串切片的方法;掌握列表的操作方法,使用循环结构在列表中保存商品的信息。

活动4:使用正则表达式匹配商品的相关信息

设计意图:获得搜索商品的网页后,如何在纷繁的数据中提取商品的名称、价格和销量?re正则表达式能动态地、模糊地匹配字符串。通过查看源代码可以找到如下信息:商品名称、价格和销量分别对应于“raw_title”“view_price“和“view_sales“。因为每一页面有多个商品名称、价格和销量,需要使用re模块中的findall()函数来匹配页面所有满足条件的字符串。

演示讲解findall()函数的使用方法,引导学生使用findall()函数对商品的名称、价格和销量分别进行匹配。关键过程及语句如下:

import  re

r_title =  re.findall(r'\"raw_title\"\:\".*?\"',html)# 商品名称

v_price = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html) #商品价格

v_sales =re.findall(r'\"view_sales\"\:\".*?\"', html)# 商品销量

提出问题:使用findall()函数匹配商品网页数据后,能够直接输出商品的名称、价格和销量吗?

学生经过分析发现不能,因为这三个列表中的数据都是以键值对的形式进行存储:

r_title = ["raw_title":"商品名称1" , "raw_title":"商品名称2" ...]

v_price = ["view_price":"商品价格1" , "view_price":"商品价格2" ...]

v_sales=[" view_sales ":"商品销量1" , " view_sales ":"商品销量2" ...]

思考问题:如何对列表中的数据去掉其中的键,只留下值?

引导学生可以发现,键值对的形式中间有个冒号,只要把键和值通过冒号进行切片,然后提取冒号后面的值,就能分别获取商品的名称、价格和销量。

活动5:通过for…in结构,遍历列表元素,使用split()函数通过冒号对字符串进行切片处理

通过for…in结构,遍历列表元素,先用split()函数将字符串以冒号进行切片,将商品的键和值分开,然后再通过索引取出所得数组中的第二个元素的值,从而分别获取商品的名称、价格和销量,然后把这3个值组成一个小列表,再把这个小列表通过append()函数存储到一个新列表中。关键过程及语句如下:

for i in range(len(r_title)):

title = eval(r_title[i].split(':')[1])

price = eval(v_price [i].split(':')[1])

view = eval(v_sales [i].split(':')[1])

infolist.append([title, price,view])

至此,每个商品的名称、价格和销量被提取出来,商品信息的列表格式如下:infolist = [["商品名称1","价格1","销量1"] , ["商品名称2","价格2","销量2"] ...]

环节三:输出商品信息

知识技能:利用xlsxwriter模块创建 xlsx 文件并添加数据

活动9:通过for…in结构,遍历商品信息的列表元素,把数据添加到excel中

利用xlsxwriter模块创建xlsx文件,通过for…in结构,遍历列表infolist的元素,分别提取商品的名称、价格和销量,通过worksheet.write_string的方法写入到excel中的B列、C列和D列,注意列表中每个元素的第一个索引值是0,第二个索引是1,依此类推。

关键遍历语句代码如下:

import  xlsxwriter

for x in infolist:

count += 1

worksheet.write("A"+str(count), count)

worksheet.write("B"+str(count), x[0])

worksheet.write("C"+str(count), x[1])

worksheet.write("D"+str(count), x[2])

但学生运行程序后,却发现excle里面没有数据,多次检查后发现爬虫程序中没有把excel表关闭,导致写入的内容会存在缓冲区中,并没有真正的写入文件里,所以还要对excle文件调用close( )函数进行关闭。

设计意图:使用python对excle写入数据操作,培养学生使用python程序对文件进行读写时良好的信息意识操作习惯。

(四)项目展示及评价

活动:采用小组自评和互评相结合的方法,请几个小组的代表展示通过爬虫程序获取网络数据的简要过程,还有学习过程中遇到的困难,小组如何克服这些困难。其他小组对展示小组的成果进行项目评价。最后,教师进行总结和结合每个小组的成果予以评分和建议。

设计意图:根据学习金字塔理论,当学习者把自己习得的知识或技能讲授给他人时,学习效率最高,让学生在分享和交流中共同进步。同时,学生在项目交流中会遇到很多问题,例如,有学生发现爬虫程序反复运行时需要间歇性更换cookie或者过段时间再运行,否则会出现爬几次后爬不到数据的情况。教师应及时指出因为淘宝也有反爬虫机制,从而引导学生不能使用爬虫程序去爬取任意的网站,进而培养学生信息社会责任的意识。

本课以项目为主线,学生为主体,教师为引导,通过“选择网站”——“获取网页数据”——“解析页面数据”——“输出商品信息”四个环节完成利用python进行网络数据采集,实现淘宝商品信息定向爬虫,解决生活中的实际问题,培养学生分析问题和解决问题的能力。项目式学习比传统的教学模式更能激发学生学习的主动性,让学生由被动学习转变为主动学习,把信息技术的知识融会贯通,提升学生的信息素养,促进学生的全面发展。

参考文献:

[1]中国大学MOOC(慕课).Python网络爬虫与信息提取[OL].https://www.icourse163.org/course/0809BIT021A-1001870001.

[2]于雁.python模拟程序的编写及应用[J].电脑知识与技术,2019(30).

[3]夏雪梅.项目化学习设计:学习素养视角下的国際与本土实践[J].教育科学出版,2018.

责任编辑  陈  洋

猜你喜欢
项目式学习高中信息技术
“全过程控制”工程项目式教学法在钢结构基本原理课程教学中的应用
PLC项目式学习与自主学习能力提高浅谈
项目式学习在应用型本科院校人才培养中的探究
在初中物理中实施项目式学习
网络信息平台支持下的PBL英语教学实践与研究
高中信息技术教学改革研究
高中信息技术探究式教学的实践与思考