文档详情

《Python网络爬虫技术案例教程》教案 第8章 爬虫框架Scrapy.docx

发布:2025-05-21约7.58千字共6页下载文档
文本预览下载声明

PAGE6

PAGE6

PAGE5

PAGE5

课题

第8章爬虫框架Scrapy

课时

6课时(270min)

教学目标

知识目标:

(1)理解Scrapy框架的构成

(2)掌握使用Scrapy框架创建爬虫程序获取所需数据的方法

能力目标:

能使用Scrapy框架编写爬虫程序爬取网站数据

素质目标:

积极探索和创新,将Scrapy应用于更广泛的场景和领域

教学重难点

教学重点:Scrapy框架的构成,使用Scrapy框架创建爬虫程序获取所需数据的方法

教学难点:使用Scrapy框架编写爬虫程序爬取网站数据

教学方法

案例分析法、问答法、讨论法、讲授法

教学用具

电脑、投影仪、多媒体课件、教材

教学过程

主要教学内容及步骤

考勤

【教师】使用APP进行签到

【学生】班干部报请假人员及原因

问题导入

【教师】提出以下问题:

什么是Scrapy框架?Scrapy框架的构成是怎样的?

【学生】聆听、思考、举手回答

传授新知

【教师】通过学生的回答引入要讲的知识,介绍Scrapy框架的构成,以及使用Scrapy框架创建爬虫程序获取所需数据的方法等知识

8.1Scrapy框架

Scrapy是目前Python中使用最广泛的爬虫框架,用于爬取网站数据,提取结构性的数据。简单来说,Scrapy是一个半成品,相关扩展组件多,可配置和可扩展程度非常高,可以帮助用户简单快速地实现一个网络爬虫。

?【教师】利用多媒体展示“Scrapy框架”图片(详见教材),并进行讲解

Scrapy框架由7个组件构成,如图所示。

……(详见教材)

在Scrapy中由Engine控制数据流,其工作的基本步骤如下。

(1)Engine从Spider获取初始爬取列表的Request。

(2)Engine将要爬取的Request发送给Scheduler,通过Scheduler进行调度。

(3)Engine向Scheduler获取下一个要爬取的Request。

(4)Engine将Request通过DownloaderMiddleware发送给Downloader。

(5)当网页下载完毕,Downloader生成该网页的Response,并将其通过DownloaderMiddleware提交给Engine。

(6)Engine将接收到Response通过SpiderMiddleware发送给Spider处理。

(7)Spider解析响应,提取Item所需的数据和新的URL,并将Item和新的Request通过SpiderMiddleware提交给Engine。

(8)Engine将Item发送给ItemPipeline,将新的Request发送给Scheduler。

(9)重复第(2)~(8)步,直到Scheduler中没有Request,Engine关闭该爬虫程序,爬取结束。

8.2Scrapy应用

?【教师】播放“Scrapy应用”视频(详见教材),并提出以下问题:

Scrapy具体如何应用?

?【学生】观看、思考、举手回答

?【教师】总结学生回答

Python提供scrapy库实现Scrapy爬虫框架,scrapy库不是Python内置的标准库,使用之前需要安装,安装方法与requests库的安装类似(请参考2.3.2节),此处不再赘述。

本节以创建BaiduSpider项目为例,介绍使用Scrapy框架编写爬虫程序的过程。

8.2.1创建项目

scrapy库提供了startproject命令用于创建一个爬虫项目,其语法格式如下:

scrapystartprojectproject_name[project_dir]

(1)project_name:表示创建的爬虫项目名称。

(2)project_dir:表示存放爬虫项目的路径。指定该参数后,会在project_dir目录下生成一个名为project_name的文件夹;如果不指定该参数,则将在命令执行路径下生成。

……(详见教材)

8.2.2修改items脚本

?【教师】利用多媒体展示“items脚本模板”图片(详见教材),并进行讲解

scrapy库提供Item对象来实现将爬取到的数据转换成结构化数据的功能。实现方法是定义Item类(继承scrapy.Item类),并定义类中的数据类型为scrapy.Filed字段。BaiduSpider项目中items脚本的模板如图所示。

BaiduSpider项目爬取的目标是百度首页热榜新闻,包括排名、标题、链接和搜索结果个数。根据项目目标,重新定义Item,在items.py中添加如下代码。

classNewsItem(scrapy.Item): #定义NewsItem类

index=scrapy.Fie

显示全部
相似文档