Scrapy框架主要由五大组件组成,它们分别是调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)和实体管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。下面咱们分别介绍各个组件的做用。segmentfault
调度器,说白了能够想像成一个URL(抓取网页的网址或者说是连接)的优先队列,由它来决定下一个要抓取的网址是什么,同时去除重复的网址(不作无用功)。用户能够跟据本身的需求定制调度器。网络
下载器,是全部组件中负担最大的,它用于高速地下载网络上的资源。Scrapy的下载器代码不会太复杂,但效率高,主要的缘由是Scrapy下载器是创建在twisted这个高效的异步模型上的(其实整个框架都在创建在这个模型上的)。框架
爬虫,是用户最关心的部份。用户定制本身的爬虫,用于从特定的网页中提取本身须要的信息,即所谓的实体(Item)。用户也能够从中提取出连接,让Scrapy继续抓取下一个页面。异步
实体管道,用于处理爬虫提取的实体。主要的功能是持久化实体、验证明体的有效性、清除不须要的信息。ide
Scrapy引擎是整个框架的核心。它用来控制调试器、下载器、爬虫。实际上,引擎至关于计算机的CPU,它控制着整个流程。spa
Scrapy运行流程大概以下:调试
首先,引擎从调度器中取出一个连接(URL)用于接下来的抓取队列
引擎把URL封装成一个请求(Request)传给下载器,下载器把资源下载下来,并封装成应答包(Response)ip
而后,爬虫解析Response资源
如果解析出实体(Item),则交给实体管道进行进一步的处理。
如果解析出的是连接(URL),则把URL交给Scheduler等待抓取