前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫课堂(十六)|Scrapy框架结构及工作原理

爬虫课堂(十六)|Scrapy框架结构及工作原理

作者头像
黄小怪
发布2018-05-21 17:36:08
1.3K0
发布2018-05-21 17:36:08
举报
文章被收录于专栏:小怪聊职场小怪聊职场

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services)或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

一、Scrapy框架组件介绍

在介绍Scrapy的工作原理之前,我们简单了解下Scrapy框架中的各个组件。如下图16-1所示。

图16-1

Scrapy框架主要由六大组件组成,它们分别是调试器(Scheduler)、下载器(Downloader)、爬虫(Spider)、中间件(Middleware)、实体管道(Item Pipeline)和Scrapy引擎(Scrapy Engine)。

1.1、调度器(Scheduler)

调度器,负责对Spider提交的下载请求进行调度。说白了可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是什么,同时去除重复的网址(不做无用功)。用户可以跟据自己的需求定制调度器。

1.2、下载器(Downloader)

下载器,负责下载页面(发送HTTP请求/接收HTTP响应)。是所有组件中负担最大的,它用于高速地下载网络上的资源。Scrapy的下载器代码不会太复杂,但效率高,主要的原因是Scrapy下载器是建立在twisted这个高效的异步模型上的(其实整个框架都在建立在这个模型上的)。

1.3、爬虫(Spider)

爬虫,负责提取页面中数据,并产生对新页面的下载请求。是用户最关心的部份,也是由用户自己实现。用户定制自己的爬虫,用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。

1.4、中间件(Middleware)

中间件,负责对Request对象和Response对象进行处理。如上图16-1所示,Scrapy框架中有两种中间件:爬虫中间件(Spider Middleware)和下载器中间件(Downloader Middleware)。

爬虫中间件是介入到Scrapy的Spider处理机制的钩子框架,可以添加代码来处理发送给Spiders的Response及Spider产生的Item和Request。

下载器中间件是介于Scrapy的Request/Response处理的钩子框架,是用于全局修改Scrapy Request和Response的一个轻量、底层的系统。

1.5、实体管道(Item Pipeline)

实体管道,用于处理爬虫提取的实体。主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。

1.6、Scrapy引擎(Scrapy Engine)

Scrapy引擎是整个框架的核心。它用来控制调试器、下载器、爬虫。实际上,引擎相当于计算机的CPU,它控制着整个流程。

二、Scrapy运行流程

1)当爬虫(Spider)要爬取某URL地址的页面时,使用该URL初始化Request对象提交给引擎(Scrapy Engine),并设置回调函数。 

Spider中初始的Request是通过调用start_requests() 来获取的。start_requests() 读取start_urls 中的URL,并以parse为回调函数生成Request 。

2)Request对象进入调度器(Scheduler)按某种算法进行排队,之后的每个时刻调度器将其出列,送往下载器。

3)下载器(Downloader)根据Request对象中的URL地址发送一次HTTP请求到网络服务器把资源下载下来,并封装成应答包(Response)。

4)应答包Response对象最终会被递送给爬虫(Spider)的页面解析函数进行处理。

5)若是解析出实体(Item),则交给实体管道(Item Pipeline)进行进一步的处理。

由Spider返回的Item将被存到数据库(由某些Item Pipeline处理)或使用Feed exports存入到文件中。

6)若是解析出的是链接(URL),则把URL交给调度器(Scheduler)等待抓取。

以上就是Scrapy框架的运行流程,也就是它的工作原理。Request和Response对象是血液,Item是代谢产物。

三、Spiders

在所有的组件中,爬虫(Spider)组件对于用户来说是最核心的组件,完全由用户自己开发。Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取Item)。 换句话说,Spider就是我们定义爬取的动作及分析某个网页(或者是有些网页)的地方。

从Spider的角度来看,爬取的运行流程如下循环:

1)以初始的URL初始化Request,并设置回调函数。 当该Request下载完毕并返回时,将生成Response,并作为参数传给该回调函数。

2)在回调函数内分析返回的(网页)内容,返回 Item 对象或者 Request 或者一个包括二者的可迭代容器。返回的Request对象之后会经过Scrapy处理,下载相应的内容,并调用设置的callback函数(函数可相同)。

3)在回调函数内,可以使用选择器(Selectors) 来分析网页内容,并根据分析的数据生成Item。

4)最后,由Spider返回的Item将被存到数据库或存入到文件中。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.03.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档