1. 架构介绍
- engine: 引擎, 处理整个系统的数据流处理, 触发事务, 是整个框架的核心
- Item: 项目, 它定义了爬取结果的数据结构, 爬取的数据会被赋值成Item对象
- Scheduler: 调度器, 接受引擎发过来的请求并将其加入队列中, 在引擎再次请求的时候将请求提供给引擎
- Downloader : 下载器, 下载网页内容, 并将网页内容返回给蜘蛛
- Spiders: 蜘蛛, 其内定义了爬取的逻辑和网页的解析规则, 它主要负责解析响应并生成提取结果和新的请求
- Item Pipeline : 项目管道, 负责处理由蜘蛛从网页中抽取的项目, 它主要任务就是清洗, 验证和存储数据
- Downloader Middlewares : 下载器中间件, 位于引擎和下扎起之间的钩子框架, 主要处理引擎和下载器之间的请求和响应
- Spider Middlewares : 蜘蛛中间件, 位于引擎和蜘蛛中间的钩子框架, 主要处理蜘蛛输入的响应和输出的结果以及新的请求
2.数据流
Scrapy中的数据流由引擎控制, 数据流的过程如下:
- Engine首先打开一个网站, 找到处理该网站的spider, 并向该Spider请求第一个要爬取的URL
- Engine 从Spider中获取到第一个要爬取的URL, 并通过Schedule 以 Request的形式调度
- Engine 向Schedule请求下一个要爬取的URL,
- Scheduler返回下一个要爬取的URL给Engine, Engine将URL通过 Downloader Middlewares转发给Downloader下载
- 一旦页面下载完毕, Downloader生成该页面的Response, 并将其通过Downloader Middlewares发给Engine.
- Engine从下载器中收到Response, 并将其发送给Spider处理
- Spider处理Response, 并返回爬取到的Item及新的Request给Engine
- Engine将Spider返回的Item给Item Pipeline,将新的Request 给 Scheduler
- 重复 2 - 8, 直到 Scheduler中没有更多的 Request, Engine关闭该网站, 爬取结束
通过多个组件的相互协作, 不同组件完成工作的不同, 组件对异步处理的支持, Scrapy最大限度的利用了网络带宽, 大大提高了数据爬取和处理的效率
3. 项目结构
Scrapy框架和pyspider不同, 它是通过命令行来创建项目的, 代码的编写还是需要IDE,