Scrapy组件:
* 引擎【Engine】:处理整个系统的数据流处理 触发事务
* 调度器【Scheduler】:接收Engine发来的请求并压入队列,在请求时执行出队
* 下载器【Downloader】:通过Engine拿到调度器出队的URL执行下载操作,并将response返回给Spiders
* 爬虫【Spiders】:从Downloader返回的response中提取item,即实体(爬取的主要目标就是从非结构性的数据源提取结构性数据)。必须返回一个包含 Request 及(或) Item 的可迭代的对象
* 管道【Pipeline】:其主要功能是持久化实体、验证实体的有效性。具体功能如下,
- 清理HTML数据
- 验证爬取的数据(检查item包含某些字段)
- 查重(并丢弃)
- 将爬取结果保存到数据库中
* 下载中间件【Downloader Middlewares】:介于Engine和Downloader之间的中间件,主要用于处理Engine和Downloader之间之间的请求及响应。
* 爬虫中间件【Spider Middlewares】:介于Engine和Spiders之间的中间件,主要用于处理Spider的响应输入和请求输出。
* 调度中间件【Scheduler Middlewares】:介于Engine和Scheduler之间的中间件,主要用于处理Engine发送到Scheduler的请求和响应。
Scrapy运行流程:
- Engine向Spiders请求URL
- Spiders爬取URL对象并返回给Engine
- Engine将URL对象执行入队操作存入Scheduler中
- Scheduler执行出队操作,将URL通过Engine处理提交给Downloader
- Downloader拿到URL后执行下载操作,并将response通过Engine处理返回给Spiders
- Spiders解析从Downloader返回的response(提取所需数据),如果解析出的是URL对象则重复执行步骤2,如果解析出的是item对象则需要进行结构化数据处理,并将处理后的item通过Engine处理传到Pipeline进行进一步处理
- Pipeline处理并保存从Spiders返回的Item