网络数据采集

2021-09-10 18:47徐安西
红豆教育 2021年5期
关键词:教育大数据爬虫

徐安西

【摘要】教育大数据背景下,数据采集是教学资源库建设、网络信息管理、教学研究的前提。利用网络爬虫,采集网页表层数据,可以充分发挥大数据无处不在的“第三只眼”作用。本案例从网络爬虫原理开始,探析其技术架构,以实例引领学生探索网络爬虫数据采集的魅力。

【关键词】教育大数据;数据采集python 爬虫

一、设计思想

本节课是广东教育出版社2019版《普通高中信息技术必修1:数据与计算》第5.2.1小节“数据采集的方法和工具”中部分内容[1],网页数据采集是大数据时代数据采集技术之一,也是教育大数据研究与实践的重要数据来源之一。网络爬虫程序是在第4章Python程序设计的基础上,结合HTML网页制作知识,进行网页文本信息采集。因此,该部分教学内容涉及到的基础知识多,实践应用形式丰富。

在实际教学中分为三大部分,第一程序展示,以爬虫的信息采集为切入点,激发学生的学习兴趣。第二部分,模块介绍与Python爬虫程序的结构。第三部分提炼爬虫原理。在教学过程中结合任务驱动,程序语法用以点代面的方法,例如在soup.find语法中只围绕解决实际问题的知识点进行探究,而不是面面俱到。程序架构上让学生通过观察、提炼出程序的架构。通过实际的操作提炼出爬虫的概念。

二、学情分析

本节课的教学对象是高一年级的学生,通过初中的信息技术课学生已经掌握了简单的网页制作与HTML语言,知道网页内容版块与HTML标记间的关系;熟练掌握了Python语言的三种流程结构,可以进行基本程序逻辑的架构;了解了模块的作用,使用模块思想组织程序代码。

三、教学目标

知识与技能目标

了解requests模块、BeautfiulSoup模块的作用;学会requests模块、BeautfiulSoup模块最基本的语法;掌握爬虫原理。

过程与方法

本节课通过展示爬虫应用,激发学习兴趣;展示网络爬虫原理图,逐步编写代码;通过实例探究采集网页中的文字信息。

情感态度与价值观

引导学生了合法使用爬虫程序:指导学生采集网络表层数据,进行学习、研究;不采集电话号码、Email等个人信息,不进行数据跟踪“深扒”个人隐私;不在短时间内,对同一个网站发出网络爬虫下载请求,造成网络蛮力攻击。

四、教学重难点

1.教学重点

(1)网络爬虫原理与结构;

(2)requests网页模块与循环不间断下载;

(3)BeautfiulSoup网页解析模块的基本功能与用法;

2.教学难点

根据爬虫实际应用,结合不同参数,合理使用BeautfiulSoup模块中find方法,发现有用信息。

五、教学准备

1.准备爬虫图。

2.实验环境:需要在Python中提前安装requests、bs4模块;

3.爬虫编程参考手册;

4.爬虫各模块示例代码;

5.目标网站。

六、教学过程

1.导入:演示程序,激发兴趣

师:班级正在开展“阅读经典”的这个活动,请你到“古诗文网”去下载《孟子》《史记》等全文。下载的格式保存成txt格式,分发给大家,以方便大家离线阅读。请大家尝试完成任务。

学生:打开网站,有的同学在找有没有提供txt直接下载的链接,有的同学在一页一页打开、选择、复制。

师:这个网站没有提供txt直接下载,而且孟子的章节很多,如果一页一页的去打开复制,这个任务很繁重。我们正在学习Python,老师编写了一个程序来,大家一起来看一看效果?(程序省略)

【设计意图】

通过实际问题让同学们意识到以前的方法已经不能有效的解决问题,有必要寻求新的方法。教师演示程序,通过效率的对比,激发了同学学习欲望。

2.探究:模块功能

师:Python是一個功能非常强大的语言,它的强大之处就在于提供了非常多的模块,用python编程来解决实际问题,在明确需求后,首要的任务就是找模块。针对这个任务我们要选择哪些模块呢?对于模块选择问题,我们先回过头看一看,我们用人工采集的方法中做了哪些事情,什么事情是你希望用程序实现的?

学生:思考并梳理人工采集的步骤。

师、生:一起分享探讨,整个过程就干了两件事:

(1)打开网页,根据以前所学的知识,就是客户端浏览器向服务器发出一个request请求,Web服务器把请求结果以HTML源码的形式返回;

(2)让计算机自动在网页上“找”到所需的内容。

总结:所以Python爬虫就要能自动完成这2件事的功能:

(1)自动向服务器发出request请求,下载并存储HTML源码;

(2)源码中“找”到相应的文本信息。

【设计意图】

通过梳理人工采集的步骤,让学生了解所选的python模块应具有什么功能。每个功能模块在程序中承当的角色。这也为学生自己探索开发新程序提供一般性的思路。

3.探究:模块使用

(1)网页下载模块

师:对于第一个功能,我们称为网页下载模块,通过了解,在Python中比较出名是urllib、requests等模块可以实现此功能,我们这里选择了requests模块。

学生:观察打印res.text的结果,发现要查找的内容就包含在HTML源代码中。更换URL地址,查看被访问网页的HTML代码与res.text内容是否一致。

(2)网页解析模块

师:下面我们讨论网能实现网页内文本信息“找”这个功能。我们称为页解析模块,

这里引入一个叫BeautifulSoup模块。

实例化一个BeauifulSoup对象,取名soup,实例化时有2个参数,第一参数是要分析的文本,由于我们要找的内容就在res.text里,所以填入res.text,第二参数是分析的标准,html.parser是html语法分析器,也是默认的分析标准。

(3)提出问题,共同探究

师:提问soup会通过什么方式来查找到信息的?

①大家看孟子第一节的HTML源代码,要找的内容是包含在哪个标记中的?

②对于不同结构的网页,是否有同样的规律?

学生:查看HTML源代码,找出信息所在的标记。更换URL,再次检查包含文本信息的HTML标记

(4)探索功能丰富的soup.find(‘p’)

师:大家发现,我们所招的内容是包含在<p>标记中,具体进行试验来验证。

学生:通过打印,我们发现r里面存储还是一段HTML代码,参考学习手册,探索r与r.text的作用,r.text取出不带标记的文本内容,就相当于这段HTML代码在网页中呈现的效果。

(5)问题再现:如何找到所有需要的文本信息?

师:通过观察,这并不是我们要找的内容,因为find只是返回的第一个查找到的结果。我们看HTML 源代码,原来在这之段内容之前还有其它的<p>标记。即使没有“作者:佚名”这一段,我们要找的内容包含在2个<p>标记里面,find只是找到第一个<p>,那第二个<p>怎么解决?有没有简单的方法?

学生:通过不同类型网页试验、比较,发现要找的内容不仅包含在2个<p>标记中,也包含在<div>标记中。

(6)深究细节,解决问题

师:我们把r=soup.find(‘p’)改成r=soup.find(‘div’),通过打印,结果找到的还是其它内容,问题出在什么地方?

学生活动:跟<p>标记问题一样,HTML源代码中不止一个<div>标记。

师:为了区别这些<div>标记,我们应该给与更多的信息。大家有没有发现,我们要找的div标记跟其它的div标记有什么不同?

学生:发现<div>标记的class属性值不同。

师:所以我们要告诉程序,你不仅是要找div标记,而且要找class属性值是‘contson’的div标记,请参考手册,改写程序。

学生活动:改写程序,并打印验证结果。

【设计意图】

对于requests模块和BeautifulSoup模块的使用,这里采用的是尝试法。通过不断的尝试修改代码,发现问题,再修改,再尝试。

4.深挖:爬虫的原理

师:通过上面的代码,我们已经可以找到第一节的内容,如何得到第二、三节的内容?

学生:尝试修改上面的代码,得到正确的结果。

师:在解决第二、三节问题时,大家思考,修改了哪些代码,哪些代码是不需要修改的?

学生:我们只要修改url的值,而其它的代码不需要修改:

师:

res=requests.get(url)

print(r.text)

上面这段代码无论在哪个章节都不需要修改,如果把这段代码抽象成一个功能,那就是“访问一张网页,找、写”。回到最初的问题,怎样得到全部的章节?

学生:讨论解决方法。

如果要实现全部章节的下载,只要不断的更改url的值。而“访问一张网页,找、写”这段代码都是重复不变的。

师:我们用什么结构来处理这些重复的事情呢,请画出流程示意图。

学生活动:画出流程示意图。

师:根据流程示意图,打开2.py,补充编写代码:

学生:写出while模块的结构。

师:很多同学被卡在怎样得到下一页的网址url上,请大家手工浏览网页,我们怎样到下一章去,是不是点击“下一章”按钮。说明下一章的网址就包含在这个超链接之中,请大家查看HTML源代码,如何在这个超链接中提取下一章的网址呢?

学生活动:查看HTML源代码,发现下一章的网址存在于<a>这个标记中。

师:我们查看每个网址,就是两个部分组成:

url=“https://so.gushiwen.org”+“/guwen/bookv_1127.aspx”

第一部分是固定的,而第二部分就是存在“下一章”这个超链接标记的‘href’属性中,所以我们只要找到每张网页中指向“下一章”的超链接<a>标记就可以了,我们把找的结果存在link这个变量里,我们写这样一段代码可不可以:

link=soup.find(‘a’)

学生:思考不可以的原因,并修改代码。

师:得到了正确的url,如果我们到了最后一章怎么办?请完善代码。

学生:完善代码,测试,找出问题,再测试。

师生:共同完善代码。

师:我们这段程序自动访问一个url,抓取数据后,再自动的访问下一个url,不断循环重复。我们把具有这种功能的程序称为蜘蛛或爬虫程序。教师展示原理示意图。

【设计意图】

对于下载所有章节问题,让学生在做中发现哪些代码是“变”的,哪些是“不变”的。哪些是需要重复的,自然而然的让学生运用已学的循环结构来处理问题,提高学生自我分析解决问题的能力。

5.自我创新、思考:

(1)现在网址是手工输入的,很繁琐。如何让爬虫自己从特定的文件或数据库自动更多的URL地址?

(2)如果想让爬虫只抓取特定文本信息的网页,如何修改代码呢?

七、教学反思

1.程序教学中,对一些语法、模块的用法采用以点代面的方式进行教學。即以一个小点为切入口,让学生去尝试,不需要面面俱到。

2.程序教学中另一个难点就是程序流程结构,很多学生能读懂代码,但是在解决实际问题时又不知道如何下手。可以在教学中经常让学生自己去思考得出程序流程结构,而不是仅仅关注具体的语法。

参考文献:

[1]高中信息技术必修1:数据与计算广东教育出版社2019

(南京师范大学附属中学江苏南京 210003)

猜你喜欢
教育大数据爬虫
基于Python的网络爬虫和反爬虫技术研究
Python反爬虫设计
大数据爬虫风暴
基于Scrapy框架的分布式网络爬虫的研究与实现
谁抢走了低价机票
基于云计算的高校大学生信息平台的研究
“教育大数据”视角下的精准教学的研究
狭义教育大数据在英语教学中的应用模式
教育大数据在教育管理中的运用分析
带你进入网络爬虫与反爬虫的世界