购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2 Scrapy框架结构及执行流程

Scrapy框架结构和流程设计遵循网络爬虫的基本原理。通过组件封装不同的功能模块;通过请求和响应类封装数据流;通过引擎指挥整个系统协调运行。

3.2.1 Scrapy框架结构

理解了HTTP和爬虫的基本原理,就不难理解Scrapy的框架结构了。如图3-2所示为Scrapy的框架结构,包含了不同功能的组件、系统中发生的数据流及执行流程。

1.组件

下面简单介绍一下Scrapy框架结构中包含的组件。

·引擎(Engine)

引擎犹如总指挥,是整个系统的“大脑”,指挥其他组件协同工作。

·调度器(Scheduler)

调度器接收引擎发过来的请求,按照先后顺序,压入队列中,同时去除重复的请求。

·下载器(Downloader)

下载器用于下载网页内容,并将网页内容返回给爬虫(Scrapy下载器是建立在twisted这个高效的异步模型上的)。

·爬虫(Spiders)

爬虫作为最核心的组件,用于从特定的网页中提取需要的信息,即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。

图3-2 Scrapy框架结构

·项目管道(Item Pipelines)

项目管道负责处理爬虫从网页中抽取的实体。主要的功能是持久化实体、验证实体的有效性、清除不需要的信息等。

·下载器中间件(Downloader Middlewares)

下载器中间件介于引擎和下载器之间,主要处理Scrapy引擎与下载器之间的请求及响应。

·爬虫中间件(Spider Middlewares)

爬虫中间件介于引擎和爬虫之间,主要工作是处理爬虫的响应输入和请求输出。

2.数据流

Scrapy框架结构中传递和处理的数据主要有以下3种:

·向网站服务器发送的请求数据(请求的内容见2.1.3节);

·网站服务器返回的响应数据(响应的内容见2.1.4节);

·解析后的结构数据(类似于字典)。

Scrapy中定义的Request和Response类,用于保存请求和响应数据;Item类保存解析后的结构数据。它们分别对应于图3-2中标识的Requests、Response和Items。

3.2.2 Scrapy执行流程

下面从数据流的角度介绍Scrapy框架的执行流程。

图3-2中第①、②、③、④步,执行的是HTTP请求,传递和处理的是向网站服务器发送的请求数据。

第①步:爬虫(Spider)使用URL(要爬取页面的网址)构造一个请求(Request)对象,提交给引擎(Engine)。如果请求要伪装成浏览器,或者设置代理IP,可以先在爬虫中间件中设置,再发送给引擎。

第②步:引擎将请求安排给调度器,调度器根据请求的优先级确定执行顺序。

第③步:引擎从调度器获取即将要执行的请求。

第④步:引擎通过下载器中间件,将请求发送给下载器下载页面。

图3-2中第⑤、⑥、⑦、⑧步,执行的是HTTP响应,传递和处理的是网站服务器返回的响应数据。

第⑤步:页面完成下载后,下载器会生成一个响应(Response)对象并将其发送给引擎。下载后的数据会保存于响应对象中。

第⑥步:引擎接收来自下载器的响应对象后,通过爬虫中间件,将其发送给爬虫(Spider)进行处理。

第⑦步:爬虫将抽取到的一条数据实体(Item)和新的请求(如下一页的链接)发送给引擎。

第⑧步:引擎将从爬虫获取到的Item发送给项目管道(Item Pipelines),项目管道实现数据持久化等功能。同时将新的请求发送给调度器,再从第②步开始重复执行,直到调度器中没有更多的请求,引擎关闭该网站。 qgso+nCaqL6mE2Iyvv4LhNIfD9T8BHItxppkhuMHJw9tRgfIDJMkXsPQJDD3cKzW

点击中间区域
呼出菜单
上一章
目录
下一章
×